C#の列挙型Enum.TryParse()メソッドの使い方を解説
概要
C#のEnum.TryParse()メソッドは、1つ以上の列挙定数に対応する文字列表現を、等価な列挙オブジェクトへと変換します。通常のParse()メソッドと異なり、変換に失敗しても例外がスローされず、戻り値(bool型)で成功・失敗を判定できるため、安全な文字列変換処理に適しています。
列挙型の定義
まず、サンプルで使用する列挙型を定義します。
enum Vehicle { Bus = 2, Truck = 4, Car = 10 };文字列配列の準備
次に、変換対象となる文字列の配列を宣言し、数値や名前などさまざまな形式の値を設定します。
string[] VehicleList = { "2", "3", "4", "bus", "Truck", "CAR" };この配列には、列挙値に対応する数値("2"、"4")、未定義の数値("3")、大文字小文字が異なる名前("bus"、"Truck"、"CAR")が含まれています。
Enum.TryParse()メソッドによる変換
Enum.TryParse()メソッドを使って、これらの値を順番に解析します。第2引数にtrueを指定することで、大文字小文字を区別せずに比較できます。
例
using System;
public class Demo {
enum Vehicle { Bus = 2, Truck = 4, Car = 10 };
public static void Main() {
string[] VehicleList = { "2", "3", "4", "bus", "Truck", "CAR" };
foreach (string val in VehicleList) {
Vehicle vehicle;
if (Enum.TryParse(val, true, out vehicle))
if (Enum.IsDefined(typeof(Vehicle), vehicle) | vehicle.ToString().Contains(","))
Console.WriteLine("Converted '{0}' to {1}", val, vehicle.ToString());
else
Console.WriteLine("{0} is not a value of the enum", val);
else
Console.WriteLine("{0} is not a member of the enum", val);
}
}
}実行結果
Converted '2' to Bus 3 is not a value of the enum Converted '4' to Truck Converted 'bus' to Bus Converted 'Truck' to Truck Converted 'CAR' to Car
コードのポイント
- 大文字小文字の無視:TryParse()の第2引数にtrueを渡すことで、"bus"や"CAR"のように大文字小文字が異なる文字列でも正しく変換できます。
- 未定義値のチェック:TryParse()は数値文字列"3"も変換できてしまうため(内部的に数値として扱われるため)、Enum.IsDefined()メソッドを組み合わせて、実際に列挙型で定義された値かどうかを確認しています。
- outパラメータ:変換結果はoutパラメータvehicleに格納され、メソッドの戻り値が変換の成否を表します。失敗時でも例外が発生しないため、ユーザー入力の検証などに便利です。
-
C#のSequenceEqualメソッドの使い方を徹底解説!コレクションの等価性を判定する方法
C#のSequenceEqualメソッドは、2つのコレクションが等しいかどうかを判定するために使用されるLINQのメソッドです。要素の数だけでなく、順序も含めて各要素が一致しているかどうかを比較し、結果をbool型(true / false)で返します。このメソッドを使用するには、System.Linq名前空間が必要です。配列やリストなど、IEnumerableインターフェースを実装するあらゆるコレクションに対して利用できます。サンプルデータの準備まず、3つの文字列配列を用意してみましょう。string[] arr1 = { This, is, it }; string[] arr2 = {
-
Javaのメソッド内に列挙型(enum)は定義できる?エラーの原因と正しい書き方を解説
Javaの列挙型(enum)は、名前付き定数をひとつのグループとしてまとめて扱うための仕組みです。基本的な構文は以下のとおりです。enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }列挙型はクラスの中であれば定義できますが、メソッドの中で定義することはできません。メソッド内にenumを記述すると、コンパイル時に「enum types must not be local(列挙型はローカルにしてはならない)」というコンパイルエラーが発生します。エラーになるコード例次のように、メソッド内に直接