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)
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |