C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でArrayListの読み取り専用ラッパーを作成する方法

ArrayListの読み取り専用ラッパーを作成するには、ArrayList.ReadOnly()メソッドを使用します。このメソッドは、元のコレクションへの変更を防ぐ読み取り専用のラッパーを返します。まずは基本的な例を見てみましょう。

例1:通常のArrayListの動作確認

using System;
using System.Collections;

public class Demo {
   public static void Main(){
      ArrayList list = new ArrayList();
      list.Add("One");
      list.Add("Two");
      list.Add("Three");
      list.Add("Four");
      list.Add("Five");
      list.Add("Six");
      list.Add("Seven");
      list.Add("Eight");

      Console.WriteLine("ArrayListの要素...");
      foreach(string str in list){
         Console.WriteLine(str);
      }

      Console.WriteLine("ArrayListは読み取り専用か? = " + list.IsReadOnly);
   }
}

出力

上記のコードを実行すると、次のような出力が得られます。

ArrayListの要素...
One
Two
Three
Four
Five
Six
Seven
Eight
ArrayListは読み取り専用か? = False

このように、通常のArrayListに対してIsReadOnlyプロパティを確認すると「False」が返され、リストが変更可能であることがわかります。

例2:ReadOnly()メソッドで読み取り専用ラッパーを作成する

次に、ArrayList.ReadOnly()メソッドを使って、既存のArrayListから読み取り専用のラッパーを作成する例を見てみましょう。

using System;
using System.Collections;

public class Demo {
   public static void Main(){
      ArrayList list = new ArrayList();
      list.Add("One");
      list.Add("Two");
      list.Add("Three");
      list.Add("Four");
      list.Add("Five");
      list.Add("Six");
      list.Add("Seven");
      list.Add("Eight");

      Console.WriteLine("ArrayListの要素...");
      foreach(string str in list){
         Console.WriteLine(str);
      }

      Console.WriteLine("ArrayListは読み取り専用か? = " + list.IsReadOnly);

      // 読み取り専用ラッパーの作成
      ArrayList list2 = ArrayList.ReadOnly(list);
      Console.WriteLine("list2は読み取り専用か? = " + list2.IsReadOnly);
   }
}

出力

このコードを実行すると、以下の出力が得られます。

ArrayListの要素...
One
Two
Three
Four
Five
Six
Seven
Eight
ArrayListは読み取り専用か? = False
list2は読み取り専用か? = True

ポイント解説

  • ArrayList.ReadOnly(list)は、元のリストを包む(ラップする)読み取り専用ビューを返します。
  • ラッパー経由でAddRemoveなどの変更操作を行おうとすると、NotSupportedExceptionがスローされます。
  • 注意点として、元のlist自体は依然として変更可能です。読み取り専用になるのはあくまでラッパーlist2を通じてアクセスした場合のみです。
  • 要素の読み取りや列挙(foreach)は、ラッパーでも問題なく行えます。

このように、外部にコレクションを公開したいが変更されたくない場合などに、読み取り専用ラッパーは有効な手段となります。なお、現代のC#ではジェネリックなList<T>ReadOnlyCollection<T>を使う方が型安全で推奨されています。

  1. Matplotlib PyplotでフィギュアのAxes(軸)リストを取得する方法

    MatplotlibのPyplotを使ってフィギュアに含まれるAxes(軸)のリストを取得するには、まずフィギュアを作成し、その後get_axes()メソッドを呼び出すことで、フィギュア内のすべてのAxesオブジェクトを取得できます。取得したAxesに対して、ラベルの設定などの操作を行うことが可能です。手順NumPyを使ってデータ点 xs と ys を作成し、figure()メソッドで新しいフィギュア(または既存のフィギュア)を生成します。add_subplot()メソッドを使用して、サブプロット配置の一部としてフィギュアにAxesオブジェクトを追加します。ここでは nrows=1、ncols

  2. Androidで使えるおすすめ買い物リストアプリ4選

    買い物に出かけるたびにメモ帳とペンを用意するのが面倒だと感じているなら、デジタル化を検討してみてはいかがでしょうか。買い物リストアプリを使えば、必要な品目を素早く入力し、購入したらチェックを入れて、リストを保存しておくこともできます。さらに、リストの共有や複数デバイス間の同期など、便利な機能も豊富に搭載されています。 本記事では、Androidで使える優秀な買い物リストアプリを厳選してご紹介します。OSに標準搭載されているものも含まれています。 1. Google 買い物リスト(Google Shopping List) サードパーティ製アプリを試す前に、まずはAndroidに組み込まれてい