小编典典

使用 Enumerable.Empty 更好吗() 与新列表相对() 初始化一个 IEnumerable?

all

假设你有一个类 Person :

public class Person
{
   public string Name { get; set;}
   public IEnumerable<Role> Roles {get; set;}
}

我显然应该在构造函数中实例化角色。现在,我曾经用这样的列表来做到这一点:

public Person()
{
   Roles = new List<Role>();
}

System.Linq但是我在命名空间中发现了这个静态方法

IEnumerable<T> Enumerable.Empty<T>();

来自 MSDN

Empty(TResult)()方法缓存一个空的类型序列TResult。当它返回的对象被枚举时,它不会产生任何元素。

在某些情况下,此方法可用于将空序列传递给采用 IEnumerable(T). 它还可以用于为方法生成中性元素,例如Union.
有关此用法的示例,请参见示例部分

那么这样写构造函数会更好吗?你用它吗?为什么?或者如果不是,为什么不呢?

public Person()
{
   Roles = Enumerable.Empty<Role>();
}

阅读 61

收藏
2022-07-30

共1个答案

小编典典

我认为大多数帖子都忽略了要点。即使您使用空数组或空列表,它们也是对象,它们存储在内存中。垃圾收集器必须照顾它们。如果您正在处理高吞吐量应用程序,它可能会产生明显的影响。

Enumerable.Empty每次调用都不会创建一个对象,从而减少了 GC 的负载。

如果代码位于低吞吐量位置,那么它归结为美学考虑。

2022-07-30