我有一个名为 Division 的类,其中包含有关细分的信息(在内部列表中),包括每个细分的分类代码。在细分类中,代码存储为 int。在 Division 类中,List 用于存储所有代码。有时,会有一个没有细分的部门,因此没有代码。或者,无论出于何种原因,可能尚未为细分设置代码。因此,它的默认值为 0。我不想返回列表,除非它有实际代码。
public List<int> AllCodesList
{
get
{
return (from subdivision in SubdivisionInfoList
where subdivision.code > 0
select subdivision.code).ToList();
}
}
如果您希望它返回 null
,请执行以下操作:
public List<int> AllCodesList
{
get
{
List<int> subDivisions = null;
if (SubdivisionInfoList.Any(s => s.code > 0))
{
subDivisions = (from subdivision in SubdivisionInfoList
where subdivision.code > 0
select subdivision.code).ToList();
}
return subDivisions;
}
}
也就是说,我个人不喜欢这个,我宁愿返回一个空列表。 在调用此属性时,必须确保具有 null 检查,然后才能对列表执行任何操作(如果返回任何内容)。
乔治的建议:
public List<int> AllCodesList
{
get
{
var subDivisions = (from subdivision in SubdivisionInfoList
where subdivision.code > 0
select subdivision.code).ToList();
if (subDivisions.Count == 0)
{
subDivisions = null;
}
return subDivisions;
}
}
返回空列表而不是 null 通常是个好主意,因为调用代码可以非常简单 - 无需检查 null(这将不时丢失并导致臭名昭著的 null 指针异常)。
在某些情况下,人们对区分空列表和 null 感兴趣,但我强烈建议查看此类调用并确保方法的名称清楚将返回的内容,一些重构可能有助于永不返回 null。在您特定的情况下,我认为在"没有细分"的情况下返回空数组是完全可以的。
让subdevision.code是一个Nullable<int>
(int?
)可能更有意义,然后它可以显式表示代码的缺失,但是是的,返回空列表而不是null可能更好,因为任何使用该列表的代码都必须执行单独的null检查。