【问题标题】:C# enum to string auto-conversion?C#枚举到字符串自动转换?
【发布时间】:2010-06-09 23:11:44
【问题描述】:

是否可以让编译器自动将我的 Enum 值转换为字符串,这样我就可以避免每次都显式调用 ToString 方法。这是我想做的一个例子:

enum Rank { A, B, C }

Rank myRank = Rank.A;
string myString = Rank.A; // Error: Cannot implicitly convert type 'Rank' to 'string'
string myString2 = Rank.A.ToString(); // OK: but is extra work

【问题讨论】:

  • 不幸的是,编程涉及大量的打字,所以你只需要习惯它。
  • 嗯不确定在枚举上但在类上你可以使用隐式运算符。 msdn.microsoft.com/en-us/library/85w54y0a.aspx
  • @codeka:你的回答很有趣。不知道关于你,但我开始编码的唯一事实是我很懒,想让使用计算机更容易(即:shell 脚本自动化、简单的批处理文件等)。问如何让事情变得更容易,这是一个非常有效的问题。
  • @Cory:先是懒惰,然后是 懒惰。编写 shell 脚本让你的生活更轻松是好事,但绕过类型系统来节省输入 11 个字符是不好的。

标签: c# enums implicit-conversion


【解决方案1】:

没有。枚举是它自己的类型,所以如果你想把它转换成别的东西,你必须做一些工作。

但是,根据您对它的用途,某些方法会自动为您调用ToString()。例如,您可以这样做:

Console.Writeline(Rank.A);

【讨论】:

  • 好吧,只是我的一厢情愿。
  • 另外,为了清楚起见,Console.WriteLine 没有什么特别之处,它只是有一个重载,它接受一个 Object 并且枚举被装箱,作为对象传递,然后 WriteLine 调用 @ 987654326@就可以了。
  • @dcompiled - 如果您很好奇,可以为您的枚举编写自己的隐式转换运算符到字符串! csharphelp.com/2006/10/…
  • 也许我遗漏了一些东西,但我实际上认为不可能编写自己的隐式转换,枚举不是一个类,所以你不能向它添加方法。
【解决方案2】:

您可能不是在寻找枚举本身,而是在寻找字符串常量的列表。在某些情况下,它可以更好地满足您的需求。

改用这个:

public static class Rank
{
   public const string A = "A";
   public const string B = "B";
   public const string C = "C";
}

【讨论】:

    【解决方案3】:

    不,但至少你可以使用枚举来做一些事情,当你可能需要使用它们的字符串值时,它们会调用它们的 ToString() 方法,例如:

    Console.WriteLine(Rank.A); //prints "A".
    

    【讨论】:

      【解决方案4】:

      正确的语法应该是

      myRank.ToString("F");
      

      【讨论】:

        【解决方案5】:

        [Caution, hack] 不确定这是否令人讨厌,对我来说这似乎是一个合理的妥协。

        var myEnumAsString = MyEnum+""; Console.WriteLine(myEnumAsString); //MyEnum

        这将强制隐式 ToString()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-25
          • 2011-11-02
          • 1970-01-01
          相关资源
          最近更新 更多