C# 在C中使用枚举#
我有一个Windows应用程序,它通过命令行参数接受字符串 这个字符串将是下列之一:19,20,21,23,25。这是一个用于动态构建URL的ID 我以前在很多应用程序中使用过枚举,但我从未真正从头构建过枚举,所以(我觉得这么说很愚蠢),我不完全理解它们 根据传入的字符串,我想设置一个UI标签。我想显示的对应值如下(回想一下,#值是传入的字符串): 因此,如果23被传入,我的标签将显示“Flickr”。这是我可以用枚举做的吗C# 在C中使用枚举#,c#,enums,C#,Enums,我有一个Windows应用程序,它通过命令行参数接受字符串 这个字符串将是下列之一:19,20,21,23,25。这是一个用于动态构建URL的ID 我以前在很多应用程序中使用过枚举,但我从未真正从头构建过枚举,所以(我觉得这么说很愚蠢),我不完全理解它们 根据传入的字符串,我想设置一个UI标签。我想显示的对应值如下(回想一下,#值是传入的字符串): 因此,如果23被传入,我的标签将显示“Flickr”。这是我可以用枚举做的吗 public Form1(string collectorID) {
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?由于答案和对词典响应的解释都很透彻,所以给出了正确的答案。感谢您的回答正确,因为您对词典的回答和解释都非常透彻。谢谢