C#将枚举转换为char

时间:2016-04-20 20:46:31

标签: c# arrays enums

所以我有一个这样的枚举:

enum element
{
    Side = '|', Top = '-', Corner = '.'
}

然后我有一个只包含字符|的二维字符数组 - 。

但是当我试着写:

array[2, 3] = element.Side; 

我收到一条错误消息,指出“无法将type元素隐式转换为'char'”

那么......我做错了什么?我是否有一种优雅的方式将我的二维char数组转换为包含相应枚举的数组?我希望你理解我的问题。

2 个答案:

答案 0 :(得分:10)

您必须将element.Side强制转换为char:

arr[2, 3] = (char)element.Side
  

为什么要这样做?

enum关键字用于声明枚举,这是一个由称为枚举器列表的一组命名常量组成的不同类型。

每个枚举类型都有一个基础类型,可以是任何整数类型 除了char 。枚举元素的默认基础类型是int。要声明另一个整数类型的枚举,例如byte,请在标识符后跟类型后使用冒号,如下例所示。

  

那么通过声明你的枚举会发生什么?

在封面下,编译器为枚举的每个字符生成它的对应整数表示。您可以通过创建控制台应用程序并尝试向控制台写入以下内容来验证这一点:

(int)element.Side

您将获得124.请检查here以确认124是竖线的十进制表示。

此外,您可以使用dissasembler验证这一点。下图是使用IL DASM拍摄的。

enter image description here

如果单击Side: public static literal...,将使用以下语句打开一个新窗口。

enter image description here

什么是0x0000007C?

垂直条的十六进制表示! 您可以在here找到更多信息。

您可以找到有关enum herehere的更多信息。

答案 1 :(得分:2)

您不能将char作为枚举的基本类型,因此,无法将element隐式转换为char。虽然您已为枚举中的元素指定了char个值,但它们会转换为int值。你必须在使用之前进行施放:

arr[2, 3] = (char)element.Side

实际上,您的代码是:

enum element : int
{
    Side = '|', Top = '-', Corner = '.'
}

如果您尝试将基本类型设置为char,编译器会抱怨。