C#で配列が読み取り専用(ReadOnly)かどうかを確認する方法
C#で配列が読み取り専用(Read-Only)かどうかを確認するには、IsReadOnly プロパティを使用します。このプロパティは、配列が読み取り専用であれば true、書き込み可能であれば false を返します。
あわせて覚えておきたいのが IsFixedSize プロパティです。通常の配列は常に固定サイズ(true)ですが、読み取り専用とは限りません。配列を読み取り専用にしたい場合は、Array.AsReadOnly メソッドを使ってラップする必要があります。
それでは、実際のコード例を見ていきましょう。
例1:空の配列の場合
using System;
public class Demo {
public static void Main() {
string[] products = new string[] { };
Console.WriteLine("'E'で始まる要素は1つ以上ありますか? = {0}",
Array.Exists(products, ele => ele.StartsWith("E")));
Console.WriteLine("配列は固定サイズですか? = " + products.IsFixedSize);
Console.WriteLine("配列は読み取り専用ですか? = " + products.IsReadOnly);
}
}
出力結果
'E'で始まる要素は1つ以上ありますか? = False 配列は固定サイズですか? = True 配列は読み取り専用ですか? = False
このように、空の配列でも IsFixedSize は true になりますが、IsReadOnly は false となる点に注目してください。
例2:要素を持つ配列の場合
次に、複数の要素を持つ配列での動作を確認してみましょう。
using System;
public class Demo {
public static void Main() {
string[] products = { "Mobiles", "Laptop", "Watches", "Books" };
Console.WriteLine("製品リスト...");
foreach (string s in products) {
Console.WriteLine(s);
}
Console.WriteLine("\n'C'で始まる製品は1つ以上ありますか? = {0}",
Array.Exists(products, ele => ele.StartsWith("C")));
Console.WriteLine("'D'で始まる製品は1つ以上ありますか? = {0}",
Array.Exists(products, ele => ele.StartsWith("D")));
Console.WriteLine("'T'で始まる製品は1つ以上ありますか? = {0}",
Array.Exists(products, ele => ele.StartsWith("T")));
Console.WriteLine("'E'で始まる製品は1つ以上ありますか? = {0}",
Array.Exists(products, ele => ele.StartsWith("E")));
Console.WriteLine("配列は読み取り専用ですか? = " + products.IsReadOnly);
}
}
出力結果
製品リスト... Mobiles Laptop Watches Books 'C'で始まる製品は1つ以上ありますか? = False 'D'で始まる製品は1つ以上ありますか? = False 'T'で始まる製品は1つ以上ありますか? = False 'E'で始まる製品は1つ以上ありますか? = False 配列は読み取り専用ですか? = False
まとめ
- IsReadOnly:配列が読み取り専用かどうかを判定するプロパティ
- IsFixedSize:配列が固定サイズかどうかを判定するプロパティ(通常の配列は常に
true) - 通常の配列は要素の追加・削除はできませんが、各要素の値は変更可能なため、
IsReadOnlyはfalseになります - 完全に読み取り専用にしたい場合は
Array.AsReadOnlyメソッドでReadOnlyCollection<T>としてラップします
-
C言語で配列内の指定範囲の積(剰余演算)を求める方法
配列 A、範囲の左端 L、右端 R、そして素数 P を入力として与え、L から R までの範囲内にある要素の総乗(積)を P で割った余りを計算して出力するのが本記事の課題です。下図のように、配列の要素が並んでおり、左端の値 L は 2、右端の値 R は 6 です。プログラムはこの範囲内に含まれる要素の積を順次計算していきます。入出力例Input-: A[] = { 1, 2, 3, 4, 5, 6 } P = 29 L = 2 R = 6 Output-: 24 Input-: A[] = {1, 2, 3, 4, 5, 6}, L = 2 R = 5 P = 113
-
C++のSTLを使って配列が回文かどうかを判定するプログラム
整数 n 個からなる配列 arr[n] が与えられたとき、「その配列は回文(パリンドローム)か?」を判定するのが本稿のテーマです。C++ の STL(標準テンプレートライブラリ)を活用して、この問題をシンプルに解いていきます。 STLとは STL(Standard Template Library)は、C++ に用意されたテンプレートクラスの集合体で、スタック・キュー・リストといったデータ構造や、ソート・反転などの便利な関数を提供します。これらを活用するには、テンプレートクラスに関する基本的な知識が必要です。本稿では、STL の reverse() 関数を使って配列を反転させています。 回文と