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

问题描述 投票:0回答:6

是否可以让编译器自动将我的 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
c# enums implicit-conversion
6个回答
11
投票

不。枚举是它自己的类型,所以如果你想将它转换为其他类型,你必须做一些工作。

但是,根据您使用它执行的操作,某些方法会自动为您调用

ToString()
。例如,您可以这样做:

Console.Writeline(Rank.A);

10
投票

您可能不是在寻找枚举本身,而是在寻找字符串常量列表。在某些场景下更能满足您的需求。

用这个代替:

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

1
投票

不,但至少你可以使用枚举做一些事情,当你可能需要使用它们的字符串值时,它们会调用它们的

ToString()
方法,例如:

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

1
投票

正确的语法应该是

myRank.ToString("F");

0
投票

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

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

这将强制隐式 ToString()


0
投票

这个问题很多年前就被问过,但尽管如此......

这是使用反射从枚举中获取 string[] 的非常简单的方法:

public static string[] EnumToStr<T>() where T : Enum
{
    return Enum.GetNames(typeof(T));
}

就像这样使用它:

public enum Test
{
    alpha,
    beta,
    gamma
}

var test_str = EnumToStr<Test>();

foreach (var name in test_str)
     Console.WriteLine(name);
© www.soinside.com 2019 - 2024. All rights reserved.