我有这样的枚举:如何将char转换为基于char的枚举对象?
enum OptionalityEnum { call = 'C', put = 'P', undefined = 'N' }
有一个简单的办法把一个字符为枚举类型?这工作:
char chOpt = 'C';
OptionalityEnum opt = (OptionalityEnum)chOpt; //opt = OptionalityEnum.call
但是,如果我的char是一个值不存在于枚举中,这会产生奇怪的结果。
char chOpt = 'X';
OptionalityEnum opt = (OptionalityEnum)chOpt; //opt = 88
我知道一些枚举函数,但我找不到一个为我做这个转换。
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.
我是否需要编写自己的转换器?像这样?
私有静态OptionalityEnum转换(char ch) { OptionalityEnum result =(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
函数。
好吧,我现在看到,我使用了一个不错的例子为我的转换功能。请参阅我的TryConvert功能。它实际上更短,所以也许它不是那么糟糕。如果这样的事情已经存在,我仍然会感到惊讶。 – user2023861
@ user2023861:查看我的编辑。我真的不认为有这样的事情。 –