我有这个枚举:
enum OptionalityEnum { call = 'C', put = 'P', undefined = 'N' }
有没有一种简单的方法可以将 char 转换为 enum 类型?这有效:
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.
我需要编写自己的转换器吗?像这样的东西?
私有静态 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
函数。