私はこのようなクラス階層を持っています
public class A
{
protected class B
{
String Name { get; set; }
}
protected class C : KeyedCollection<String, B>
{
// ...
}
protected C Collection { get; }
// ...
public A Copy ()
{
// Creates a deep copy of this instance.
}
}
ここで、A の 2 つのインスタンスがプロパティ KeyedCollection 内に同じ項目 B を持っているかどうかを比較する単体テストを作成したいと思います。ただし、A インスタンスに対して foreach ループを実行できません。私が試したこと、
[TestClass]
public class TestClass
{
public void ATest()
{
A original = new A();
A copy = A.Copy();
// ...
A_Accessor originalAccessor = A_Accessor.AttachShadow(original);
A_Accessor copyAccessor = A_Accessor.AttachShadow(copy);
foreach(var originalItem in originalAccessor.Collection)
{
var copyItem = copyAccessor[originalItem.Name];
Assert.AreEqual(originalItem, copyItem);
}
}
}
このコードは、C クラス アクセサーが IEnumerable インターフェイスを実装していない (KeyedCollection クラスからのインターフェイスを実装していない) ため、コンパイルされません。この問題をどのように克服できるかについて、誰かが考えを持っていますか?
私が得ているエラーメッセージは
'A_Accessor.C' には 'GetEnumerator' のパブリック定義が含まれていないため、foreach ステートメントはタイプ 'C' の変数を操作できません