31

C#で読み取り専用のプリミティブベクトルを作成する問題について読んで(基本的にはそれを行うことはできません)、

public readonly int[] Vector = new int[]{ 1, 2, 3, 4, 5 }; // You can still changes values

私はについて学びましたReadOnlyCollectionBase。これは、オブジェクトのコンテナの基本クラスであり、オブジェクトの位置にはアクセスできますが、変更はできません。MicrosoftDocsにも例があります。

ReadOnlyCollectionBaseクラス-MicrosoftDocs

任意のタイプを使用するように例を少し変更しました。

public class ReadOnlyList<T> : ReadOnlyCollectionBase {
    public ReadOnlyList(IList sourceList)  {
      InnerList.AddRange( sourceList );
    }

    public T this[int index]  {
      get  {
         return( (T) InnerList[ index ] );
      }
    }

    public int IndexOf(T value)  {
      return( InnerList.IndexOf( value ) );
    }



    public bool Contains(T value)  {
      return( InnerList.Contains( value ) );
    }

}

...そしてそれは機能します。私の質問は、なぜこのクラスがC#の標準ライブラリに存在しないのかということSystem.Collections.Genericです。私はそれを逃していますか?それはどこにある?ありがとうございました。

4

1 に答える 1

41

ReadOnlyCollection<T>上記のジェネリック版であるがあります。

list.AsReadOnly()List<T>を呼び出すことにより、直接作成できます。

于 2010-09-30T15:41:25.597 に答える