私はこの列挙型を持っています:
enum OptionalityEnum { call = 'C', put = 'P', undefined = 'N' }
char を列挙型に変換する簡単な方法はありますか? これは機能します:
char chOpt = 'C';
OptionalityEnum opt = (OptionalityEnum)chOpt; //opt = OptionalityEnum.call
しかし、私の char が列挙に存在しない値である場合、これは奇妙な結果をもたらします。
char chOpt = 'X';
OptionalityEnum opt = (OptionalityEnum)chOpt; //opt = 88
Enum 関数のいくつかについては知っていますが、この変換を行う関数が見つかりません。
Enum.GetNames(typeof(OptionalityEnum)) = { call, na, put }
Enum.GetValues(typeof(OptionalityEnum)) = { call, na, put }
Enum.TryParse<OptionalityEnum>("C", out optionality) = false
Enum.TryParse<OptionalityEnum>("call", out optionality) = true
//... but that's not what I want.
Enum.IsDefined(typeof(OptionalityEnum), "call") = true
//... but that's not what I want.
独自のコンバーターを作成する必要がありますか? このようなもの?
private static OptionalityEnum Convert(char ch) { OptionalityEnum 結果 = (OptionalityEnum)ch; if (Enum.IsDefined(typeof(OptionalityEnum), result)) 結果を返します。それ以外の場合は、OptionalityEnum.undefined を返します。}
private static bool TryConvert(char ch, out OptionalityEnum opt)
{
opt = (OptionalityEnum)ch;
return Enum.IsDefined(typeof(OptionalityEnum), opt);
}
これは機能しますが、ずさんなようです。このようなものがまだ存在しないとしたら、私は驚くでしょう。
編集:私はもともと自分のConvert
機能に悪い例を使用していました。関数に変更しましたTryConvert
。