我有这样的班级层次结构
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 的两个实例是否在属性 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 类的任何接口)。有谁知道我该如何克服这个问题?
我收到的错误消息是
foreach 语句不能对“C”类型的变量进行操作,因为“A_Accessor.C”不包含“GetEnumerator”的公共定义