Enum: нужно получить имя перечисления, а не его значение int, как строку

У меня есть перечисление с целым рядом значений (только три показаны здесь):

public enum LookupType
{
 Alignment,
 Language,
 ReEmbedBehavior
}

Затем у меня есть метод, который получает данные на основе поля varchar под названием LookupType... я хочу ограничить вызывающих пользователей этим методом только теми типами lookupty, которые находятся в базе данных... так что в конце моего WHERE, я хочу, чтобы имя перечисления было строкой, а не целочисленным значением.

Затем вызывающие лица будут делать что-то вроде GetLookupsByLookupType (LookupType.Language), и мой метод сделает вызов "где lookuptype =" Язык "

public List<lookup> GetLookupsByLookupType(UnicornMedia.Core.DomainModel.Enumerations.LookupType lookupType)
 {
 var lookups = new List<lookup>();
 string SQL = String.Format(@"Select id, name, value, lookuptype
 from lookups
 where lookuptype = '{0}'", lookupType.ToString());
 ...<snip>... 
 }
</snip></lookup></lookup>

Возможно, что-то простое, но я, кажется, время от времени сталкиваюсь с этим, и вместо того, чтобы понять это, я в конечном итоге просто использую словарь... во всяком случае, вот оно, спасибо

6 ответов

Просто выполнение .ToString() получит имя перечисления в виде строкового значения.


Вы пробовали Enum.GetName?

Собственно, следующий фрагмент показывает, что просто вызов ToString также работает.

enum LookupType {
 Language
}
public class Program {
 public static void Main(string[] args) {
 string str = string.Format("{0}", LookupType.Language);
 // str = "Language"
 Console.WriteLine(LookupType.Language);
 // output: Language
 }
}


Попробуйте выполнить

string name = System.Enum.GetName(typeof(LookupType), LookupType.Language);


Вы можете использовать метод GetName (http://msdn.microsoft.com/en-us/library/system.enum.getname.aspx):

Enum.GetName(typeof(LookupType), lookupType);


Ваш код должен работать нормально. Я выполнил следующее, и строка вернула ожидаемые результаты.

class Program
{
 static void Main(string[] args)
 {
 LookupType lookupType = LookupType.Language;
 Console.WriteLine(GetLookupsByLookupType(lookupType));
 Console.Read();
 }
 public static string GetLookupsByLookupType(LookupType lookupType)
 {
 string SQL = String.Format(@"Select id, name, value, lookuptype from lookups where lookuptype = '{0}'", lookupType.ToString());
 return SQL; 
 }
}
public enum LookupType
{
 Alignment,
 Language,
 ReEmbedBehavior
}

Убедитесь, что вы не передаете строку SQL, как показано на рисунке выше. Либо соедините строку в одной строке, либо используйте следующее:

string SQL = String.Format(@"Select id, name, value, lookuptype from " + 
 "lookups where lookuptype = '{0}'", lookupType.ToString());


Вам не нужно GetName...

LookupType.Alignment.ToString();

или

так же, как у вас в коде...

lookupType.ToString()

licensed under cc by-sa 3.0 with attribution.