问题 C#枚举到字符串自动转换?


是否可以让编译器自动将我的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

5567
2018-06-09 23:11


起源

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


答案:


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

但是,根据您正在使用它执行的操作,某些任务会自动为您调用ToString()。例如,你可以这样做:

Console.Writeline(Rank.A);

10
2018-06-09 23:16



好吧,我只是一厢情愿的想法。 - dcompiled
另外,为了清楚起见,没有什么特别之处 Console.WriteLine,它只是有一个重载,它接受一个对象,枚举被装箱,作为一个对象传递然后 WriteLine 电话 ToString 在上面。 - Dean Harding
@dcompiled - 如果你很好奇,可以为枚举编写自己的隐式转换运算符! csharphelp.com/2006/10/... - Mike Atlas
也许我错过了一些东西,但实际上我认为不可能编写自己的隐式转换,枚举不是一个类,所以你不能添加方法。 - Robert Noack


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

改为使用它:

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

3
2018-02-10 07:52





不,但至少你可以用枚举来做他们的事情 ToString() 您可能需要使用其字符串值的方法,例如:

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

1
2018-06-09 23:17





应该是正确的语法

myRank.ToString("F");

0
2018-06-09 23:46





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

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

这将强制隐式ToString()


0
2017-07-14 13:15