0

各サブディビジョンの分類コードを含む、サブディビジョンに関する情報(内部リスト内)を含むDivisionというクラスがあります。Subdivisionクラスでは、コードはintとして格納されます。Divisionクラスでは、リストを使用してすべてのコードを格納します。場合によっては、サブディビジョンがないため、コードがないディビジョンがあります。または、何らかの理由で、サブディビジョンにコードが設定されていない可能性があります。したがって、デフォルト値は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;
    }
}

とはいえ、私は個人的にこれのファンではなく、空のリストを返したいと思っています。リストで何かを行う前に、このプロパティを呼び出すときに 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;
    }
}
于 2012-09-19T18:01:46.097 に答える
2

subdevision.code をNullable<int>( int?) にする方が理にかなっているかもしれません。これにより、コードが存在しないことを明示的に表すことができますが、リストを使用するコードは null ではなく空のリストを返す方がおそらく良いでしょう。別々のヌル チェックを行います。

于 2012-09-19T18:02:04.707 に答える
2

null の代わりに空のリストを返すことは、呼び出しコードが非常に単純になるため、一般的には良い考えです。

空のリストと null の区別に関心がある場合もありますが、そのような呼び出しを確認し、何が返されるかについてメソッドの名前が明確であることを確認することを強くお勧めします。あなたの特定のケースでは、「サブディビジョンなし」の場合に空の配列を返すことはまったく問題ないと思います。

于 2012-09-19T18:03:01.973 に答える