Adi*_*be7 17 c# ienumerable casting
我有类foo的例子,我想把它作为IEnumerable返回.我可以在不创建新列表的情况下执行此操作.
也许类似如下:
IEnumerable<foo>.fromInstance(foo)
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 21
选项:
ReadOnlyCollection<T> 包装器.Enumerable.Repeat(item, 1)如果您使用的是.NET 3.5,请使用LINQ.这里最好的答案取决于用法.如果你只需要调用另一个使用序列的方法,并且你知道它不会被修改,我可能会使用一个数组.例如,为了调用Concat其他序列,您可能需要:
var wholeList = regularList.Concat(new[] { finalValue });
Run Code Online (Sandbox Code Playgroud)
我有信心Concat不会改变数组,没有别的东西会看到对数组本身的引用.
如果你需要将序列返回到其他代码,并且你不知道它可以用它做什么,我可能会使用Enumerable.Repeat.
Bot*_*000 17
你可以这样做:
public IEnumerable<Foo> GetSingleFooAsEnumerable() {
yield return singleFoo;
}
Run Code Online (Sandbox Code Playgroud)
Gab*_*abe 14
执行此操作的最佳惯用方法new[] { foo }就是创建一个foo声明为任何类型的1元素数组.
一个可能的缺点是数组不是不可变的,所以有人可以将你转换IEnumerable<T>为a T[]并更改其中的值.但这是不太可能的,所以我不担心.