gpt4 book ai didi

C#: 'default' 泛型关键字

转载 作者:太空狗 更新时间:2023-10-29 19:57:56 25 4
gpt4 key购买 nike

我编写了以下方法以从可序列化类 (POCO) 列表中返回不可序列化类(LINQ 类)列表:

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

现在,Resharper 已经“提示”了这一行:if (e != null),并建议将其更改为:

if (!Equals(e, default(SerializableEntity))) 

我的问题是这个变化实际上改进了什么或阻止了哪些发生?并且我知道在这种情况下 default 关键字必须对泛型做一些事情,但我不确定它代表什么正是。

附言。 UnSerializableEntitySerializableEntity 是类泛型。

最佳答案

如果 SerializableEntity 是一个值类型,它永远不能为 null。因此,if 语句的主体将始终执行,因为它正在检查 nulldefault 关键字将返回泛型类型的默认值。对于引用类型,默认值为 null。对于值类型,它是零(或任何零代表该值类型)。

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

List<UnSerializableEntity> ToListOfUnserializables(List<SerializableEntity> entityList)
where SerializableEntity : class

关于C#: 'default' 泛型关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com