为什么 char.GetNumericValue() 给出错误的结果?

时间:2021-05-24 14:20:41

标签: c# enums char

我有以下枚举

public enum Status
{
    New = 'N',
    Live = 'L',
    Expired = 'E'
}

在收到字符 'N' 后,我想获得相关值(即 Status.New

似乎 Enum.Parse 不适用于 char,甚至 char.toString(),因此我想获取与字符关联的数值

var myChar = 'N';
var myNumber = Char.GetNumericValue(myChar); // or char.GetNumericValue(myChar);

myNumber的值为-1,不正确

这是怎么回事?

2 个答案:

答案 0 :(得分:3)

Microsoft documentation 表示 Char.GetNumericValue() 将指定的数字 Unicode 字符转换为双精度浮点数

字符“N”不是数字,而是字母字符。

如果你想获得一个 Status 枚举值,你可以使用:

Status status = (Status)myChar;

答案 1 :(得分:2)

documentation 表示 GetNumericValue() 返回:“c 的数值如果该字符表示数字;否则,-1.0。”
'N' 不代表数字,因此返回 -1。

char 可以隐式转换为数字:

int number = 'N';

或者,如果您想使用 var,您只需要显式转换。

另请注意,您的枚举值是 int,而不是 char。它们被隐式转换。