Вопрос

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

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

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

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

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

foreach (var item in obj.Iterator) {
}

Как бы ты позаботился об этом?

Это было полезно?

Решение

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

Другие советы

public IEnumerable<int> Iterator {
    get { yield break; }
}

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

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

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

public static IEnumerable<int> Iterator { 
  get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
  public IEnumerable<int> Iterator {
        get { yield break; }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top