C# 在C中使用枚举#

C# 在C中使用枚举#,c#,enums,C#,Enums,我有一个Windows应用程序,它通过命令行参数接受字符串 这个字符串将是下列之一:19,20,21,23,25。这是一个用于动态构建URL的ID 我以前在很多应用程序中使用过枚举,但我从未真正从头构建过枚举,所以(我觉得这么说很愚蠢),我不完全理解它们 根据传入的字符串,我想设置一个UI标签。我想显示的对应值如下(回想一下,#值是传入的字符串): 因此,如果23被传入,我的标签将显示“Flickr”。这是我可以用枚举做的吗 public Form1(string collectorID) {

我有一个Windows应用程序,它通过命令行参数接受字符串

这个字符串将是下列之一:19,20,21,23,25。这是一个用于动态构建URL的ID

我以前在很多应用程序中使用过枚举,但我从未真正从头构建过枚举,所以(我觉得这么说很愚蠢),我不完全理解它们

根据传入的字符串,我想设置一个UI标签。我想显示的对应值如下(回想一下,#值是传入的字符串):

因此,如果23被传入,我的标签将显示“Flickr”。这是我可以用枚举做的吗

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


斯科特:是的,你可以。看看MSDN:

听起来不应该使用枚举来完成,但如果这是您的解决方案,您可以将枚举设置为:

public enum MyEnum
{
    Facebook = 19,
    Twitter = 20
    .
    .
}
编辑: 要获取值名称,请执行以下操作:

string s = Enum.GetName(typeof (MyEnum), 19);

是的,你可以。看看MSDN:

听起来不应该使用枚举来完成,但如果这是您的解决方案,您可以将枚举设置为:

public enum MyEnum
{
    Facebook = 19,
    Twitter = 20
    .
    .
}
编辑: 要获取值名称,请执行以下操作:

string s = Enum.GetName(typeof (MyEnum), 19);
用于筛选出无效输入并将名称存储在字典中

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];
    }
}
公共枚举社交网络{
Facebook=19,
推特=20,
YouTube=21,
Flickr=23,
博客=25
}
var name=newdictionary(){
{SocialNetwork.Facebook,“Facebook”}
...
};
字符串输入=/*读取用户输入*/;
Int32社交网络整数;
if(Int32.TryParse(输入,输出社交网络整数)){
if(枚举已定义(类型(SocialNetwork),socialNetworkInteger)){
字符串名称显示=名称[(社交网络)社交网络整数];
}
}
用于过滤无效输入并将名称存储在字典中

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];
    }
}
公共枚举社交网络{
Facebook=19,
推特=20,
YouTube=21,
Flickr=23,
博客=25
}
var name=newdictionary(){
{SocialNetwork.Facebook,“Facebook”}
...
};
字符串输入=/*读取用户输入*/;
Int32社交网络整数;
if(Int32.TryParse(输入,输出社交网络整数)){
if(枚举已定义(类型(SocialNetwork),socialNetworkInteger)){
字符串名称显示=名称[(社交网络)社交网络整数];
}
}
<>请注意,许多程序员(包括我)都认为使用EnUM的“代码> toSTRIN())/代码>有点“愚蠢”(这是因为你在不修改程序和“不可本地化”)的情况下使所有东西都是“不可变的”。 我要补充的是,您可以使用
字典
(更好一点,字典可以动态加载):

Dictionary sites=newdictionary()
{
{19,“脸谱”},
{20,“推特”},
{21,“YouTube”},
{23,“Flickr”},
{25,“博客”},
};
//
字符串str2;
如果(!sites.TryGetValue(i,out str2))
{
抛出新异常();
}
//str2包含您的站点描述
<>请注意,许多程序员(包括我)都认为使用EnUM的“代码> toSTRIN())/代码>有点“愚蠢”(这是因为你在不修改程序和“不可本地化”)的情况下使所有东西都是“不可变的”。 我要补充的是,您可以使用
字典
(更好一点,字典可以动态加载):

Dictionary sites=newdictionary()
{
{19,“脸谱”},
{20,“推特”},
{21,“YouTube”},
{23,“Flickr”},
{25,“博客”},
};
//
字符串str2;
如果(!sites.TryGetValue(i,out str2))
{
抛出新异常();
}
//str2包含您的站点描述

您可以使用枚举完成此操作,但可能不应该。
enum
的值用于代码中,不向用户显示。如果您想显示“Foo Bar Service”,会发生什么情况


正因为如此,而且似乎您实际上只需要数字和字符串之间的映射,所以您应该这样做:使用
字典
开关

您可以使用枚举来实现这一点,但您可能不应该这样做。
enum
的值用于代码中,不向用户显示。如果要显示“Foo Bar服务”,会发生什么

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);
}

正因为如此,而且似乎您实际上只需要数字和字符串之间的映射,所以您应该这样做:使用
字典
开关

按以下方式使用它:

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);
}
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();
    }

按以下方式使用:

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();
    }

这听起来不像是枚举。听起来像是int上的switch语句。这不是解决方案,但为什么需要枚举?这意味着你要用代码对它们进行硬编码。而是使用XML文件,使您的代码更具动态性。实际上不需要,最初有一个开关,更想知道这是否符合枚举的功能。对我来说,这听起来不像枚举。听起来像是int上的switch语句。这不是解决方案,但为什么需要枚举?这意味着你要用代码对它们进行硬编码。而是使用XML文件,使您的代码更具动态性。不需要XML文件,最初有一个开关,更想知道这是否符合枚举的功能。因此,我通过命令行传入“19”,如何将标签设置为Facebook?因此,我通过命令行传入“19”,我如何将我的标签设置为Facebook?由于答案和对词典响应的解释都很透彻,所以给出了正确的答案。感谢您的回答正确,因为您对词典的回答和解释都非常透彻。谢谢