带有Generics的C#:'default'关键字

And*_*ech 7 c# generics resharper

我编写了以下方法来从Serializable类(POCO)列表中返回一个Unserializable类(LINQ类)列表:

List<UnSerializableEntity> ToListOfUnserializables(List<SerializableEntity> entityList)
{
    var tempList = new List<UnSerializableEntity>();
    entityList.ForEach(e =>
    {
        if (e != null)
        {
            tempList.Add(ConvertFromSerializableToUnserializable(e));
         }
     });
     return tempList;
}
Run Code Online (Sandbox Code Playgroud)

现在,Resharper已经"抱怨"了这一行:if (e != null)并建议将其更改为:

if (!Equals(e, default(SerializableEntity))) 
Run Code Online (Sandbox Code Playgroud)

我的问题是这种变化实际上有哪些改善或阻止发生? 我知道这个上下文中的默认关键字必须与泛型有关,但我不确定它的确切含义.

PS.UnSerializableEntity并且SerializableEntity是类泛型.

Ken*_*art 13

如果SerializableEntity是值类型,则永远不会null.因此,if语句的主体将始终执行,因为它正在检查null.该default关键字将返回泛型类型的默认值.对于参考类型,默认值为null.对于值类型,它为零(或者该值类型的零值).

如果您只想将引用类型作为实体,则应该对通用参数设置约束.例如:

List<UnSerializableEntity> ToListOfUnserializables(List<SerializableEntity> entityList)
    where SerializableEntity : class
Run Code Online (Sandbox Code Playgroud)