C# enum to string автоконвертация?

Возможно ли, чтобы компилятор автоматически преобразовывал мои значения 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

7 ответов

Решение

Нет. Перечисление - это его собственный тип, если вы хотите преобразовать его во что-то еще, вы должны сделать некоторую работу.

Однако, в зависимости от того, что вы делаете с ним, некоторые задачи будут вызывать для него ToString() автоматически. Например, вы можете сделать:

Console.Writeline(Rank.A);

Вы, вероятно, не ищете сами перечисления, но список строковой константы. Это может соответствовать вашим потребностям лучше в некоторых сценариях.

Используйте это вместо:

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

Нет, но по крайней мере вы можете делать вещи с перечислениями, которые будут называть их ToString() методы, когда вам может понадобиться использовать их строковое значение, например:

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

Правильный синтаксис должен быть

myRank.ToString("F");

[Осторожно, взломать] Не знаю, насколько это противно, мне кажется, это разумный компромисс.

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

Это заставит неявный ToString()

      public class Ranking
{
    public Rank Rank1 { get; set; } 
}
public enum Rank { A, B, C, }
Rank myRank = Rank.A;
WriteLine(myRank);

Этот вопрос был задан много лет назад, но тем не менее...

Вот очень простой способ получить строку[] из перечисления:

      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);
Другие вопросы по тегам