假设你有一个类 Person :
public class Person { public string Name { get; set;} public IEnumerable<Role> Roles {get; set;} }
我显然应该在构造函数中实例化角色。现在,我曾经用这样的列表来做到这一点:
public Person() { Roles = new List<Role>(); }
System.Linq但是我在命名空间中发现了这个静态方法
System.Linq
IEnumerable<T> Enumerable.Empty<T>();
来自 MSDN:
该Empty(TResult)()方法缓存一个空的类型序列TResult。当它返回的对象被枚举时,它不会产生任何元素。 在某些情况下,此方法可用于将空序列传递给采用 IEnumerable(T). 它还可以用于为方法生成中性元素,例如Union. 有关此用法的示例,请参见示例部分
该Empty(TResult)()方法缓存一个空的类型序列TResult。当它返回的对象被枚举时,它不会产生任何元素。
Empty(TResult)()
TResult
在某些情况下,此方法可用于将空序列传递给采用 IEnumerable(T). 它还可以用于为方法生成中性元素,例如Union. 有关此用法的示例,请参见示例部分
IEnumerable(T)
Union
那么这样写构造函数会更好吗?你用它吗?为什么?或者如果不是,为什么不呢?
public Person() { Roles = Enumerable.Empty<Role>(); }
我认为大多数帖子都忽略了要点。即使您使用空数组或空列表,它们也是对象,它们存储在内存中。垃圾收集器必须照顾它们。如果您正在处理高吞吐量应用程序,它可能会产生明显的影响。
Enumerable.Empty每次调用都不会创建一个对象,从而减少了 GC 的负载。
Enumerable.Empty
如果代码位于低吞吐量位置,那么它归结为美学考虑。