Я имею в виду класс foo, и я хочу вернуть его как IEnumerable. Могу ли я сделать это, не создавая новый список и т.д.
Возможно, что-то вроде следующего:
IEnumerable<foo>.fromInstance(foo)
Я имею в виду класс foo, и я хочу вернуть его как IEnumerable. Могу ли я сделать это, не создавая новый список и т.д.
Возможно, что-то вроде следующего:
IEnumerable<foo>.fromInstance(foo)
Параметры:
ReadOnlyCollection<T>
вокруг такой коллекции.Enumerable.Repeat(item, 1)
из LINQ, если вы используете .NET 3.5.Лучший ответ здесь зависит от использования. Если вам нужно только это, чтобы вызвать другой метод, который использует последовательность, и вы знаете, что он не будет изменен, я бы, вероятно, использовал массив. Например, для вызова Concat
в какой-либо другой последовательности вам может понадобиться:
var wholeList = regularList.Concat(new[] { finalValue });
У меня есть уверенность, что Concat
не будет мутировать массив, и больше ничего не увидит ссылка на сам массив.
Если вам нужно вернуть последовательность в какой-то другой код, и вы не знаете, что с ним можно сделать, я бы, вероятно, использовал Enumerable.Repeat
.
вы можете сделать это:
public IEnumerable<Foo> GetSingleFooAsEnumerable() {
yield return singleFoo;
}
Лучший идиоматический способ сделать это - это что-то вроде new[] { foo }
, который просто создает 1-элементный массив любого типа foo
.
Единственный возможный недостаток заключается в том, что массивы не являются неизменяемыми, поэтому кто-то может передать ваш IEnumerable<T>
в T[]
и изменить значение там. Однако это маловероятно, поэтому я не беспокоюсь об этом.
IENumerable предполагается использовать для чего-то, что вы можете перечислить, поэтому использование его для одного экземпляра кажется довольно странным. Если вам действительно нужно, вы можете сделать это так. Это может быть лучший способ, но это должно выполнить работу:
List<foo> myList = new List<foo>();
myList.Add( myInstanceOfFoo );
IEnumerable myEnumerable = myList.AsEnumerable();
Независимо от того, как вы это видите, вы на самом деле пытаетесь составить список одного элемента, а затем действительно нет причин сделать его списком.