如果要创建类型为T的空IEnumerable,可以使用静态泛型方法创建它
Enumerable.Empty<T>()
有关详细信息,请参阅here。
为什么Microsoft选择此选项而不是在泛型类型上使用静态方法(而不是非泛型类型的通用静态方法)?
这种方法可以像这样使用:
Enumerable<T>.Empty()
然后返回一个空的IEnumerable<T>
。
在我看来,第二个选项更有意义,因为我想要创建的是通用的IEnumerable<T>
,而不是非通用的IEnumerable
。
编辑:拼写错误
答案 0 :(得分:12)
IEnumerable<T>
是一个界面
接口不能包含静态成员。
静态方法实际上位于 Enumerable
类型,这是一个非通用static
类。
因此,没有Enumerable<T>
泛型类可以包含该方法。
Static members on generic types should be avoided。
扩展方法不能放置在泛型类型中
这就是静态Enumerable
类不是通用的原因。
答案 1 :(得分:3)
有一个名为Enumerable
的静态类,定义了此方法。没有名为Enumerable<T>
的静态类。这是因为Enumerable
在IEnumerable<T>
上定义了扩展方法(所有这些方法都有一个通用参数T
),并且扩展方法不能存在于泛型类中。这就是Empty<T>
被定义为原因的原因。
来自规范的§10.6.9:
扩展方法只能在非通用的非嵌套静态类中声明。