別のデータ型の特定の値のみを許可するデータ型を作成するにはどうすればよいですか? たとえば、文字列として 50 の状態に制限された型を作成したいとします。どうすればそれを行うことができますか?ヘルパー関数を使用してenum
からヘルパー関数を使用するのは、私には少しハックに感じます。
編集:これを追加するのは遅いと思いますが、コンパイル時のエラー チェック ソリューションが理想的です。
別のデータ型の特定の値のみを許可するデータ型を作成するにはどうすればよいですか? たとえば、文字列として 50 の状態に制限された型を作成したいとします。どうすればそれを行うことができますか?ヘルパー関数を使用してenum
からヘルパー関数を使用するのは、私には少しハックに感じます。
編集:これを追加するのは遅いと思いますが、コンパイル時のエラー チェック ソリューションが理想的です。
特定の例では、列挙型が実際に最適なソリューションです。より複雑なものについては、ファクトリ メソッドを使用できます。次に例を示します。
public class State
{
public string Name { get; private set; }
private State(string name)
{
this.Name = name;
}
public static State CreateState(string name)
{
// validate and throw error if invalid
return new State(name);
}
}
クラスを使用し、コンストラクターで特定の値のみを許可します。そうすれば、間違った値を持つクラスのインスタンスを作成することはできません。(列挙型を使用しても、値が指定されたものだけに制限されるわけではありません。)
簡単な例:
public class Paint {
public string Name { get; private set; }
public Paint(string name) {
switch (name) {
case "Red":
case "Green":
case "Blue":
Name = name;
break;
default:
throw new ArgumentException("Illegal paint name '" + name + "'.");
}
}
}
内部的には、値を文字列または列挙型として表すことができます。これは、使用方法によって異なります。