这是确定何时为所述方案返回空列表的好方法吗?



我有一个名为 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检查。

最新更新