【问题标题】:C# Convert enum to charC# 将枚举转换为字符
【发布时间】:2016-04-20 20:46:31
【问题描述】:

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

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

然后我有一个二维字符数组,它只包含字符 | - .

但是当我尝试写作时:

array[2, 3] = element.Side; 

我收到一条错误消息,提示“无法将类型元素隐式转换为 'char'”

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

【问题讨论】:

  • array[2, 3] = (char)element.Side; 将枚举转换为 char
  • 请编辑标题以将 enum 改为 char。

标签: c# arrays enums


【解决方案1】:

您必须将element.Side 转换为字符:

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

为什么要这样做?

enum 关键字用于声明一个枚举,一种由一组称为枚举数列表的命名常量组成的独特类型。

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

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

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

(int)element.Side

您将得到 124。请检查here 以验证 124 是竖线的十进制表示。

此外,您可以使用反汇编程序来验证这一点。下图是使用 IL DASM 拍摄的。

如果您单击Side: public static literal...,将打开一个新窗口,其中包含以下语句。

什么是0x0000007C?

竖线的十六进制表示! 您可以在此here 上找到更多信息。

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

【讨论】:

    【解决方案2】:

    您不能将char 作为枚举的基本类型,因此,不能将element 隐式转换为char。尽管您已将 char 值赋予枚举中的元素,但它们将转换为它们的 int 值。您必须在使用它们之前进行投射:

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

    实际上,您的代码是:

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2010-09-06
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多