Enum: нужно получить имя перечисления, а не его значение int, в виде строки - PullRequest
3 голосов
/ 04 декабря 2010

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

public enum LookupType
{
   Alignment,
   Language,
   ReEmbedBehavior
}

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

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

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>...                                         
        }

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

Ответы [ 6 ]

8 голосов
/ 04 декабря 2010

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

2 голосов
/ 04 декабря 2010

Попробуйте следующее

string name = System.Enum.GetName(typeof(LookupType), LookupType.Language);
2 голосов
/ 04 декабря 2010

Вы пробовали 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
    }
}
1 голос
/ 04 декабря 2010

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

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());
1 голос
/ 04 декабря 2010

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

LookupType.Alignment.ToString();

или

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

lookupType.ToString()
1 голос
/ 04 декабря 2010

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

Enum.GetName(typeof(LookupType), lookupType);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...