У меня есть класс, который содержит статическое количество объектов. Этот класс должен часто 'сравниваться' с другими классами, которые будут простыми Объектами списка.
public partial class Sheet
{
public Item X{ get; set; }
public Item Y{ get; set; }
public Item Z{ get; set; }
}
объекты, очевидно, не собираются быть "X" "Y" "Z", это - просто родовые названия, например. Проблема состоит в том, что из-за природы какой потребности быть сделанным, Список не будет работать; даже при том, что все в здесь будет Объекта типа. Это похоже на контрольный список очень определенных вещей, который должен быть протестирован против и в коде и во времени выполнения.
Это работает весь штраф и хорошо; это не моя проблема. Моя проблема выполняет итерации его. Например, я хочу сделать следующее...
List<Item> UncheckedItems = // Repository Logic Here.
UncheckedItems содержит все доступные объекты; и CheckedItems является экземпляром класса Листа. CheckedItems будет содержать объекты, которые были перемещены от Непроверенного до Проверенного; однако из-за природы системы хранения, объекты, перемещенные в Проверенный, не МОГУТ быть УДАЛЕНЫ из Непроверенного. Я просто хочу выполнить итерации через "Проверенный" и удалить что-либо из списка в Непроверенном, который уже находится в "Проверенном".
Так естественно это пошло бы как это с нормальным списком.
foreach(Item item in Unchecked)
{
if( Checked.Contains(item) )
Unchecked.Remove( item );
}
Но так как "Листом" не является 'Список', я не могу сделать этого. Таким образом, я хотел реализовать IEnumerable так, чтобы я мог. Какие-либо предложения? Я никогда не реализовывал IEnumerable непосредственно прежде, и я довольно смущен как, туда, где начать.
Вам нужно создать итератор, который возвращает элементы, находящиеся в листе.
public partial class Sheet
{
public Item X{ get; set; }
public Item Y{ get; set; }
public Item Z{ get; set; }
public IEnumerable<Item> EnumerateItems()
{
yield return X;
yield return Y;
yield return Z;
// ...
}
}
Если вы не хотите вызывать метод, вы можете сделать следующее.
public partial class Sheet : IEnumerable<Item>
{
public Item X{ get; set; }
public Item Y{ get; set; }
public Item Z{ get; set; }
public IEnumerator<Item> GetEnumerator()
{
yield return X;
yield return Y;
yield return Z;
// ...
}
IEnumerator IEnumerator.GetEnumerator()
{
return GetEnumerator();
}
}