C#でArrayListが読み取り専用かどうかを確認する方法
C#でArrayListが読み取り専用(ReadOnly)かどうかを確認するには、IsReadOnlyプロパティを使用します。このプロパティは、ArrayListへの書き込みが許可されているかどうかを示すブール値(true / false)を返します。
主な関連プロパティ
- IsReadOnly:ArrayListが読み取り専用かどうかを取得します
- IsSynchronized:ArrayListへのアクセスが同期されている(スレッドセーフである)かどうかを取得します
- IsFixedSize:ArrayListのサイズが固定されているかどうかを取得します
例1
以下のコードでは、通常のArrayListに対して、SynchronizedメソッドやFixedSizeメソッドで作成したラッパーの状態を確認しています。
using System;
using System.Collections;
public class Demo {
public static void Main(String[] args) {
ArrayList list1 = new ArrayList();
list1.Add("ABC");
list1.Add("BCD");
list1.Add("CDE");
list1.Add("DEF");
list1.Add("EFG");
list1.Add("GHI");
list1.Add("HIJ");
list1.Add("IJK");
list1.Add("JKL");
list1.Add("KLM");
Console.WriteLine("ArrayListの要素...");
foreach (string res in list1) {
Console.WriteLine(res);
}
// 同期されたラッパーを作成
ArrayList list = ArrayList.Synchronized(list1);
Console.WriteLine("ArrayListは同期されていますか? = " + list.IsSynchronized);
// 固定サイズのラッパーを作成
ArrayList list2 = ArrayList.FixedSize(list1);
Console.WriteLine("ArrayListのサイズは固定ですか? = " + list2.IsFixedSize);
// 読み取り専用かどうかを確認
Console.WriteLine("ArrayListは読み取り専用ですか? = " + list1.IsReadOnly);
}
}
出力
このコードを実行すると、次のような出力が得られます。
ArrayListの要素... ABC BCD CDE DEF EFG GHI HIJ IJK JKL KLM ArrayListは同期されていますか? = True ArrayListのサイズは固定ですか? = True ArrayListは読み取り専用ですか? = False
Synchronizedメソッドで作成したラッパーはスレッドセーフ(同期あり)となり、FixedSizeメソッドで作成したラッパーは要素の追加・削除ができない固定サイズになります。一方、元のlist1自体は読み取り専用ではないため、IsReadOnlyはFalseを返します。
例2
続いて、Newキーワードで生成した通常のArrayListに対して、各プロパティの値を確認する例を見てみましょう。
using System;
using System.Collections;
public class Demo {
public static void Main(String[] args) {
ArrayList list1 = new ArrayList();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");
list1.Add("E");
list1.Add("F");
Console.WriteLine("ArrayList1の要素...");
foreach (string res in list1) {
Console.WriteLine(res);
}
Console.WriteLine("ArrayList1は同期されていますか? = " + list1.IsSynchronized);
Console.WriteLine("ArrayList1は読み取り専用ですか? = " + list1.IsReadOnly);
ArrayList list2 = new ArrayList();
list2.Add("A");
list2.Add("B");
list2.Add("C");
list2.Add("D");
list2.Add("E");
list2.Add("F");
Console.WriteLine("ArrayList2の要素...");
foreach (string res in list2) {
Console.WriteLine(res);
}
Console.WriteLine("ArrayList2は同期されていますか? = " + list2.IsSynchronized);
Console.WriteLine("ArrayList2は読み取り専用ですか? = " + list2.IsReadOnly);
}
}
出力
このコードを実行すると、次のような出力が得られます。
ArrayList1の要素... A B C D E F ArrayList1は同期されていますか? = False ArrayList1は読み取り専用ですか? = False ArrayList2の要素... A B C D E F ArrayList2は同期されていますか? = False ArrayList2は読み取り専用ですか? = False
Newキーワードで生成された通常のArrayListは、同期もされておらず、読み取り専用でもないため、どちらのプロパティもFalseを返します。もし読み取り専用のコレクションが必要な場合は、ArrayList.ReadOnly(list)メソッドを使って読み取り専用ラッパーを作成すれば、IsReadOnlyがTrueを返すようになります。
-
C#でHashSetに指定された要素が含まれているか確認する方法
C#のHashSet<T>に特定の要素が含まれているかどうかを確認するには、Contains()メソッドを使用します。このメソッドは、指定した要素がHashSet内に存在する場合はtrue、存在しない場合はfalseを返します。Contains()メソッドの基本構文public bool Contains (T item);引数には検索対象の要素を渡します。HashSetはハッシュテーブルを基盤としているため、要素の検索はO(1)の計算量で実行でき、非常に高速です。例1:数値型のHashSetでContains()を使う以下は、int型のHashSetに対してContains()メ
-
C#のArrayListクラスにおけるCapacityプロパティとは?使い方を解説
ArrayListクラスのCapacityプロパティは、そのArrayListが格納できる要素の数を取得または設定するためのプロパティです。Capacity(容量)は、実際に格納されている要素数を表すCount(カウント)よりも常に大きいか等しい値になります。Capacityプロパティへのアクセスは以下のように記述します。arrList.Capacity容量の仕組みArrayListの既定の容量は4です。要素を追加していき、既定の容量を超えると、容量は自動的に2倍に拡張されます。例えば、5つの要素を追加した場合、容量は8に拡張されます。以降も同様に、容量を超えた時点で順次2倍ずつ拡張されていき