0

我有一个名为 Division 的类,其中包含有关细分的信息(在内部列表中),包括每个细分的分类代码。在 Subdivision 类中,代码存储为 int。在 Division 类中,List 用于存储所有代码。有时,会有一个没有细分的部门,因此没有代码。或者,无论出于何种原因,可能没有为细分设置代码。所以它的默认值为 0。我不想返回一个列表,除非它有实际的代码。

public List<int> AllCodesList
{
    get
    {
        return (from subdivision in SubdivisionInfoList
                where subdivision.code > 0 
                select subdivision.code).ToList();
    }
}
4

3 回答 3

5

如果您希望它返回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;
    }
}

也就是说,我个人不喜欢这个,我宁愿返回一个空列表。您必须确保在调用此属性时进行空检查,然后才能对列表执行任何操作(如果返回任何内容)。

乔治的建议:

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;
    }
}
于 2012-09-19T18:01:46.097 回答
2

Nullable<int>将 subdevision.code 设置为( )可能更有意义int?,它可以显式表示代码的缺失,但是是的,返回空列表而不是 null 可能更好,因为使用该列表的任何代码都必须做单独的空检查。

于 2012-09-19T18:02:04.707 回答
2

返回空列表而不是 null 通常是个好主意,因为调用代码可以非常简单 - 无需检查 null (有时会丢失并导致臭名昭著的空指针异常)。

在某些情况下,人们对空列表和 null 之间的区别感兴趣,但我强烈建议查看此类调用并确保方法名称清楚地表明将返回什么,一些重构可能有助于永远不会返回 null。在您的特殊情况下,我认为在“没有细分”的情况下返回空数组是非常好的。

于 2012-09-19T18:03:01.973 回答