Реализация пустых итераторов - PullRequest
0 голосов
/ 07 марта 2009

У меня есть этот код:

    public IEnumerable<int> Iterator {
        get { if (false) yield return -1; }
    }

Это довольно уродливо, но когда вы пытаетесь изменить его на:

    public IEnumerable<int> Iterator {
        get { return null; }
    }

Следующие разрывы кода:

foreach (var item in obj.Iterator) {
}

Как бы вы занялись уборкой?

Ответы [ 4 ]

10 голосов
/ 07 марта 2009
public IEnumerable<int> Iterator {
    get { yield break; }
}
6 голосов
/ 07 марта 2009

.NET Framework уже имеет метод для выполнения именно этого, кстати (делая код Джареда избыточным): System.Enumerable.Empty<T>.

2 голосов
/ 07 марта 2009

Лучшим решением было бы определить метод многократного использования для этой проблемы. Я храню метод в моей общей библиотеке, чтобы позаботиться только об этом случае.

public static class CollectionUtility { 
  public static IEnumerable<T> CreateEmptyEnumerable<T>() {
    yield break;
  }
}

Теперь в вашем методе вы можете просто вызвать

public static IEnumerable<int> Iterator { 
  get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
0 голосов
/ 20 ноября 2009
  public IEnumerable<int> Iterator {
        get { yield break; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...