我有類foo的實例,我想將它作爲IEnumerable返回。 我能做到,而無需創建一個新的列表等。作爲IEnumerable返回單實例對象
也許類似以下內容:
IEnumerable<foo>.fromInstance(foo)
我有類foo的實例,我想將它作爲IEnumerable返回。 我能做到,而無需創建一個新的列表等。作爲IEnumerable返回單實例對象
也許類似以下內容:
IEnumerable<foo>.fromInstance(foo)
選項:
ReadOnlyCollection<T>
包裝。Enumerable.Repeat(item, 1)
。這裏最好的答案取決於用法。如果你只需要需要這個調用另一個使用序列的方法,並且你知道它不會被修改,我可能會使用一個數組。例如,爲了調用Concat
一些其他的序列,你可能想:
var wholeList = regularList.Concat(new[] { finalValue });
我有信心,Concat
不會發生變異的陣列,而不是其他所見過的參考陣列本身。
如果您需要將序列返回給其他代碼,並且您不知道它可能會對它做什麼,那麼我可能會使用Enumerable.Repeat
。
最好的慣用方式做到這一點是一樣的東西new[] { foo }
剛剛創造的1個元素的數組不管什麼類型foo
被聲明爲是。
其中一個可能的缺點是數組不是不可變的,因此有人可以將IEnumerable<T>
轉換爲T[]
並更改其中的值。不過這不太可能,所以我不擔心它。
簡潔,乾淨。這應該是最重要的,並被接受。 +1 – data 2013-05-07 14:02:07
IENumerable應該用於您可以枚舉的東西,因此將它用於單個實例似乎很奇怪。如果你真的需要,你可以像這樣完成它。這可能是一個更好的辦法,但這應該完成這項工作:
List<foo> myList = new List<foo>();
myList.Add(myInstanceOfFoo);
IEnumerable myEnumerable = myList.AsEnumerable();
不管你怎麼看,你實際上是試圖讓一個元素的列表,然後它真的沒有理由讓它一個列表。
可能有很多理由將單個對象轉換爲IEnumerable。例如。有人可能想將它傳遞給一個期望IEnumerable的方法,或者它可以用來模擬Maybe monad等。 – 2011-01-24 07:20:16
你可以這樣做:
public IEnumerable<Foo> GetSingleFooAsEnumerable() {
yield return singleFoo;
}
我第二個這個響應;這種技術對枚舉特定的成員變量也很有用。 – Apelsin 2013-05-07 18:34:03
[傳遞單個項目爲IEnumerable](http://stackoverflow.com/questions/1577822/passing-a-single-item-as-ienumerablet) –
nawfal
2013-02-17 12:19:42
可能重複[將單個項目傳遞爲IEnumerable](https://stackoverflow.com/questions/1577822/passing-a-single-item-as-ienumerablet) –
2017-06-22 18:11:16