【问题标题】:Is there a type that is the opposite of an enum?有没有与枚举相反的类型?
【发布时间】:2020-06-05 05:50:31
【问题描述】:

例如,这里是一个简单的枚举:

enum Something {
   One = 1,
   Two = 2,
   Three = 3
}

但我想创建这段代码的相反,比如

SomeType Something {
   1 = One,
   2 = Two,
   3 = Threee
}

也许我可以引入常量,比如

static class Something {
   public const 1 = "One";
   // ...
}

但我收到编译器错误(CS1031、CS1001、CS0145 和 CS1003),因为 c# 无法处理此问题。 我可以对枚举做同样的事情来防止这些不必要的错误,但在这里我也得到了 CS1001,因为 c# 不理解数字是标识符。 我也可以使用字符串,但这让它变得更加复杂,因为 c# 需要另一个标识符(但不接受一个 (CS0029))

那么,c# 中有什么东西可以用来将一些类似字符串的值作为常量或枚举分配给数字吗?

【问题讨论】:

  • 你可以使用Dictionary<int, string>
  • 或者像第一个例子一样使用它并将其简单地转换回来:YourEnum foo = (YourEnum)yourInt;
  • Int 键通常表示 index,查看数组。

标签: c# enums constants


【解决方案1】:

您不能将数值作为变量名,因此要解决此问题,您可以创建一个包含键整数和值作为字符串的字典,如 Dictionary<int, string> 并相应地使用它。

【讨论】:

    【解决方案2】:

    如果这是如何使用枚举名称,您可以使用Enum.TryParse<someEnumTyme>(someString, out _someEnumVar). 但在我看来,Dictionary 的解决方案更优雅。

    【讨论】:

      【解决方案3】:

      在运行时,对于很多操作,使用枚举变量与使用底层类型是一样的。

      enum Something {
         One = 1,
         Two = 2,
         Three = 3
      }
      Something foo = Something.One; // assign 1 to foo
      

      您可以使用枚举的定义来创建值和名称之间的映射;

         var lookup = ((Something[])Enum.GetValues(typeof(Something)))
            .ToDictionary(e => e.ToString(), e => (int)e);
      
      

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 2021-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        相关资源
        最近更新 更多