[C#] 読み取り専用のArray, List, Dictoinary

IReadOnlyListIReadOnlyDictionary を実装したクラスを利用する

// 配列から読み取り専用リストを作成
static readonly System.Collections.ObjectModel.ReadOnlyCollection<string>
Consts = Array.AsReadOnly(new string[]
{
  "定数1",
  "定数2",
  "定数3",
});

// リストを読み取り専用リストに変換
static readonly System.Collections.ObjectModel.ReadOnlyCollection<int>
ConstList = new List<int>()
  {
    1,
    2,
    3,
  }.AsReadOnly();

// リストから読み取り専用リストを生成
static readonly System.Collections.ObjectModel.ReadOnlyCollection<int>
ConstList2 = new System.Collections.ObjectModel.ReadOnlyCollection<int>(new List<int>()
  {
    1,
    2,
    3,
  }.AsReadOnly());

// Dictionaryから読み取り専用Dictionary
static readonly System.Collections.ObjectModel.ReadOnlyDictionary<int, string>
ConstDictionary = new System.Collections.ObjectModel
  .ReadOnlyDictionary<int, string>(new Dictionary<int, string>()
  {
    {1, "定数1"},
    {2, "定数2"},
    {3, "定数3"}
  });

// かなり微妙な読み取り専用KeyValuePairリスト
static readonly System.Collections.ObjectModel.ReadOnlyCollection<KeyValuePair<int, string>>
ConstKeyValuePairs = new System.Collections.ObjectModel
  .ReadOnlyCollection<KeyValuePair<int, string>>(new Dictionary<int, string>()
  {
    {1, "定数1"},
    {2, "定数2"},
    {3, "定数3"}
  }.ToList().AsReadOnly());

※20151123 以前コードは readonly ではなく const になってました。コンパイル通らないですね。はい。

Share
関連記事