5

ReadOnlyCollection を使用してオブジェクトを不変にしようとしています。オブジェクトのプロパティを不変にしたいのです。

public ReadOnlyCollection<FooObject> MyReadOnlyList
{
    get
    {
        return new ReadOnlyCollection<FooObject>(_myDataList);
    }
}

しかし、私は少し混乱しました。

foreach を使用してオブジェクトのプロパティを MyReadOnlyList に変更しようとしましたが、値のプロパティを変更できますが、正しいですか? ReadOnlyCollection が追加レベルを設定して、オブジェクトを不変にすることを理解しました。

4

3 に答える 3

2

foreach を使用してオブジェクトのプロパティを MyReadOnlyList に変更しようとしましたが、値のプロパティを変更できますが、正しいですか? ReadOnlyCollection が追加レベルを設定して、オブジェクトを不変にすることを理解しました。

を使用しReadOnlyCollectionても、コレクションに格納されているオブジェクトに関しては保証されません。保証されるのは、一度作成されたコレクションを変更できないことだけです。そこから要素が取得され、変更可能なプロパティを持っている場合、それは非常にうまく変更できます。

FooObject不変のものを作成したい場合は、次のようにします。

public class FooObject
{
    public FooObject(string someString, int someInt)
    {
        SomeString = someString;
        SomeInt = someInt;
    }

    public string SomeString { get; };
    public int SomeInt { get; };
}
于 2015-09-07T12:42:15.050 に答える