9

私のドメイン オブジェクトでは、IList プロパティとの 1:M 関係をマッピングしています。

適切に分離するために、次の方法で読み取り専用にします。

private IList<PName> _property;
public ReadOnlyCollection<PName> Property
{
    get
    {
        if (_property!= null)
        {
            return new ReadOnlyCollection<PName>(new List<PName>(this._property));
        }
    }
}

ReadOnlyCollection はあまり好きではありませんが、コレクションを読み取り専用にするためのインターフェイス ソリューションが見つかりませんでした。

ここで、プロパティ宣言を編集して、null空の場合ではなく空のリストを返すようにしたいので、次のように編集します。

if (_property!= null)
{
    return new ReadOnlyCollection<PName>(new List<PName>(this._property));
}
else
{
    return new ReadOnlyCollection<PName>(new List<PName>());
}

しかしProperty、テストで取得すると常に null になります。

4

4 に答える 4

9

読み取り専用で空であるため、これを静的に保存しても安全です。

private static readonly ReadOnlyCollection<PName> EmptyPNames = new List<PName>().AsReadOnly();

次に、必要な場所で再利用します。

if (_property!= null)
{
    return new ReadOnlyCollection<PName>(new List<PName>(this._property));
}    
else
{
    return EmptyPNames;
}
于 2015-11-26T10:27:13.840 に答える
1

IList にデフォルト値を設定するとどうなるか

private IList<PName> _property = new IList<PName>();
public ReadOnlyCollection<PName> Property
{
    get
    {
        return _property
    }
}
于 2013-09-17T14:28:49.080 に答える
0

他に考えられる解決策は、クラス コンストラクターを次のように編集することです。

public MyObject (IList<PName> property)
{
  this._property = property ?? new List<PName>();
}
于 2013-09-18T11:16:45.087 に答える