内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
有没有一种通用的方法能够传递 T 类型的一个单独的项目,该方法需要一个 IEnumerable<T> 参数。使用的是 C# 语言,框架版本是 2.0.
目前我使用的是一个 helper 方法(这是 .Net 2.0,因此我有非常多的 helper 函数,看起来就像 Linq 一样),但是这看起来非常的蠢。。。
public static class IEnumerableExt { // usage: IEnumerableExt.FromSingleItem(someObject); public static IEnumerable<T> FromSingleItem<T>(T item) { yield return item; } }
当然,另一种方法是创建并填充到一个List<T>
或者Array
然后把它递过去,而不是IEnumerable<T>
...
补充:作为扩展方法,它可以命名为:
public static class IEnumerableExt { // usage: someObject.SingleItemAsEnumerable(); public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item) { yield return item; } }
希望我没有漏掉什么
补充2:我们发现someObject.Yield()
是这个扩展方法的最佳名称,主要是为了简洁,所以这里它和XML注释一起使用:
public static class IEnumerableExt { /// <summary> /// Wraps this object instance into an IEnumerable<T> /// consisting of a single item. /// </summary> /// <typeparam name="T"> Type of the object. </typeparam> /// <param name="item"> The instance that will be wrapped. </param> /// <returns> An IEnumerable<T> consisting of a single item. </returns> public static IEnumerable<T> Yield<T>(this T item) { yield return item; } }
在C# 3中(我知道你是 C#2),你可以编写一个泛型扩展方法,这可能会在语法上更容易被接受:
static class IEnumerableExtensions { public static IEnumerable<T> ToEnumerable<T>(this T item) { yield return item; } }
然后调用方的代码是item.ToEnumerable()
...