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".
[Осторожно, взломать] Не знаю, насколько это противно, мне кажется, это разумный компромисс.
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);