У меня есть классовая иерархия, подобная этой
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 имеют одинаковые элементы B внутри свойства KeyedCollection. Однако я не могу выполнить цикл foreach для экземпляров A. То, что я пробовал,
[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»