是否有一种常见的方法将单个类型的项目传递给T需要IEnumerable<T>参数的方法 ?语言是C#,框架版本2.0。
T
IEnumerable<T>
当前,我正在使用一个辅助方法(它是.Net 2.0,所以我有一堆类似于LINQ的强制转换/投影辅助方法),但这似乎很愚蠢:
public static class IEnumerableExt { // usage: IEnumerableExt.FromSingleItem(someObject); public static IEnumerable<T> FromSingleItem<T>(T item) { yield return item; } }
当然,其他方法是创建并填充a List<T>或an Array并将其传递给而不是IEnumerable<T>。
List<T>
Array
[编辑] 作为扩展方法,它可以命名为:
public static class IEnumerableExt { // usage: someObject.SingleItemAsEnumerable(); public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item) { yield return item; } }
我在这里想念什么吗?
[Edit2] 我们发现someObject.Yield()(如@Peter在下面的注释中所建议的)是此扩展方法的最佳名称,主要是为了简洁起见,因此,如果有人想要抓住它,它与XML注释一起使用:
someObject.Yield()
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; } }
IMO是您的助手方法,是最干净的方法。如果传递列表或数组,那么不道德的代码段可能会强制转换它并更改内容,从而在某些情况下导致异常行为。您可以使用只读集合,但这可能涉及更多包装。我认为您的解决方案非常简洁。