我有类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