2010-06-09 2 views
9

Возможно ли, что компилятор автоматически преобразует мои значения Enum в строки, поэтому я могу избежать явного вызова метода ToString каждый раз. Вот пример того, что я хотел бы сделать:C# enum для автоматического преобразования строк?

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 
+13

К сожалению, программирование включает в себя много печатать, так что вы просто придется привыкать к нему. –

+0

Хмм не уверен в перечислении, но в классе вы можете использовать неявный оператор. http://msdn.microsoft.com/en-us/library/85w54y0a.aspx –

+4

@codeka: Ваш ответ смешной. Dunno о вас, но я начал кодировать только тот факт, что я ленив и хотел сделать с помощью компьютера проще (например: автоматизация скриптов оболочки, простые командные файлы и т. Д.). Это совершенно правильный вопрос, чтобы спросить, как сделать что-то проще. –

ответ

9

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

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

Console.Writeline(Rank.A); 
+0

Хорошо, просто принятие желаемого за действительное с моей стороны. – dcompiled

+6

Также, чтобы быть понятным, нет ничего особенного в 'Console.WriteLine', у него просто есть перегрузка, которая принимает объект, и перечисление получает коробку, передается как объект, а затем' WriteLine' вызывает 'ToString' на нем. –

+1

@dcompiled - если вам интересно, можно написать собственный оператор неявного преобразования для вашего перечисления в строку! http://www.csharphelp.com/2006/10/type-conversion-and-conversion-operators-in-c/ –

1

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

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

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

myRank.ToString("F"); 
0

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

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

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

3

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

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

public static class Rank 
{ 
    public const string A = "A"; 
    public const string B = "B"; 
    public const string C = "C"; 
} 
Смежные вопросы