Использование Enums в C # - PullRequest
       1

Использование Enums в C #

1 голос
/ 03 сентября 2011

У меня есть приложение Windows, которое принимает строку через параметр командной строки.

Строка будет одной из следующих: 19, 20, 21, 23, 25. Это идентификатор, который используется для динамического построения URL.

Раньше я использовал перечисления во множестве приложений, но на самом деле я никогда не создавал перечисления с нуля, поэтому (я чувствую себя глупо, говоря это), я не совсем понимаю их.

На основе переданной строки я хочу установить метку пользовательского интерфейса.Соответствующие значения, которые я хочу отобразить, следующие (напомним, # значение - это строка, в которой передается):

19 = Facebook
20 = Twitter
21 = YouTube
23 = Flickr
25 = Blogs

Так что, если передано 23, моя метка скажет «Flickr».Это то, что я могу сделать с перечислениями?

public Form1(string collectorID)
{
    InitializeComponent();
    this.CollectorID = collectorID;
    labelCollector.Text = // Set label here
    WebConnection.Create(CollectorID);
}

Спасибо!

Скотт

Ответы [ 6 ]

3 голосов
/ 03 сентября 2011

Вы можете сделать это с помощью перечислений, но, вероятно, не следует. Значения enum предназначены для использования в коде, а не для отображения пользователям. Что произойдет, если вы хотите отобразить «Foo-Bar Service»?

Из-за этого и из-за того, что кажется, что вы на самом деле просто хотите отобразить числа и строки, вы должны сделать именно это: используйте Dictionary<int, string> или switch.

2 голосов
/ 03 сентября 2011

Да, вы можете. Посмотрите на MSDN: enum

Это не похоже на то, что должно быть сделано с перечислением, но если это ваше решение, вы можете установить ваше перечисление как:

public enum MyEnum
{
    Facebook = 19,
    Twitter = 20
    .
    .
}

Edit:

Чтобы получить имя значения:

string s = Enum.GetName(typeof (MyEnum), 19);
1 голос
/ 03 сентября 2011

Используйте его следующим образом:

public enum UrlType
{
    Facebook = 19,
    Twitter = 20,
    YouTube = 21,
    Flickr = 23,
    Blogs = 25
}

    public string ParseUrlType(string type)
    {
        int urlTypeId = Convert.ToInt32(type);
        if (!Enum.IsDefined(typeof(UrlType), urlTypeId))
            return null;

        UrlType urlType = (UrlType)urlTypeId;
        return urlType.ToString();
    }
1 голос
/ 03 сентября 2011
public enum MyEnum
{
    Facebook = 19,
    Twitter = 20,
    YouTube = 21,
    Flickr = 23,
    Blogs = 25,
}

public Form1(MyEnum collectorID)
{
    InitializeComponent();
    this.CollectorID = collectorID;
    labelCollector.Text = collectorId.toString();
    WebConnection.Create(CollectorID);
}
1 голос
/ 03 сентября 2011
enum Sites
{
    Facebook = 19,
    Twitter = 20,
    YouTube = 21,
    Flickr = 23,
    Blogs = 25,
}

//

int i = 19;

if (!Enum.IsDefined(typeof(Sites), i))
{
    throw new Exception();
}

string str = ((Sites)i).ToString();

Имейте в виду, что многие программисты (включая меня) считают использование ToString() перечисления немного «глупым» (это потому, что вы делаете все «неизменяемым, если вы не модифицируете программу» и «нелокализуемым»)

Я добавлю, что вы можете сделать это с Dictionary (чуть лучше, словарь может быть загружен динамически):

Dictionary<int, string> sites = new Dictionary<int, string>() 
{
    { 19, "Facebook" },
    { 20, "Twitter" },
    { 21, "YouTube" },
    { 23, "Flickr" }, 
    { 25, "Blogs" },
};

//

string str2;

if (!sites.TryGetValue(i, out str2))
{
    throw new Exception();
}

// str2 contains your site description
1 голос
/ 03 сентября 2011

Используйте Enum.IsDefined , чтобы отфильтровать неверные входные данные и сохранить имена в словаре.

public enum SocialNetwork {
    Facebook = 19,
    Twitter = 20,
    YouTube = 21,
    Flickr = 23,
    Blogs = 25
}

var names = new Dictionary<SocialNetwork, String>() {
    { SocialNetwork.Facebook, "Facebook"}
    ...
};


String input = /*Read user input*/;
Int32 socialNetworkInteger;
if (Int32.TryParse(input, out socialNetworkInteger)) {
    if (Enum.IsDefined(typeof(SocialNetwork), socialNetworkInteger)) {
        String nameToDisplay = names[(SocialNetwork) socialNetworkInteger];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...