如何在枚举C#中设置字符串
本文关键字:设置 字符串 枚举 | 更新日期: 2023-09-27 18:22:25
我想在c#中创建字符串ENUM
。
基本上我不想在Enum
中设置表单名称。当我在主页中打开表单时,我想切换表单名称的大小写并打开那个特定的表单。我知道ENUM
只允许整数,但我想把它设置为string
。有什么想法吗?
枚举不能是字符串,但您可以附加属性,然后可以读取枚举的值,如下所示。。。。。。。。。。。。。。。。。。。。
public enum States
{
[Description("New Mexico")]
NewMexico,
[Description("New York")]
NewYork,
[Description("South Carolina")]
SouthCarolina
}
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes != null &&
attributes.Length > 0)
return attributes[0].Description;
else
return value.ToString();
}
如果你想浏览一下,这里有一篇很好的文章:在C#中将字符串与枚举关联
正如大家提到的,枚举不能是C#中的字符串(或除整数之外的任何其他内容)。我猜你来自Java?如果.NET有这个功能,枚举可以是任何类型,那就太好了。
我通常避免这种情况的方法是使用一个静态类:
public static class MyValues
{
public static string ValueA { get { return "A"; } }
public static string ValueB { get { return "B"; } }
}
使用此技术,您也可以使用任何类型。你可以像使用enums:一样调用它
if (value == MyValues.ValueA)
{
// do something
}
这样做:
private IddFilterCompareToCurrent myEnum =
(IddFilterCompareToCurrent )Enum.Parse(typeof(IddFilterCompareToCurrent[1]),domainUpDown1.SelectedItem.ToString());
[Enum.parse]返回一个Object,因此需要对其进行强制转换。
我不确定我是否完全理解你,但我认为你在寻找这个?
public enum State { State1, State2, State3 };
public static State CurrentState = State.State1;
if(CurrentState == State.State1)
{
//do something
}
我不认为枚举是解决问题的最佳方案。正如其他人已经提到的那样,枚举的值只能是整数值。
您可以简单地使用Dictionary
来存储表单及其名称,如:
Dictionary<string, Form> formDict = new Dictionary<string, Form>();
private void addFormToDict(Form form) {
formDict[form.Name] = form;
}
// ...
addFormToDict(new MyFirstForm());
addFormToDict(new MySecondForm());
// ... add all forms you want to display to the dictionary
if (formDict.ContainsKey(formName))
formDict[formName].Show();
else
MessageBox.Show(String.Format("Couldn't find form '{0}'", formName));
将Enum
成员的名称设置为您想要的名称,然后使用.ToString()
、
编写这样的函数。。。
string MyEnumString(MyEnum value)
{
const string MyEnumValue1String = "any string I like 1";
const string MyEnumValue2String = "any string I like 2";
...
switch (value)
{
case MyEnum.Value1:
return MyEnumValue1String;
case MyEnum.Value2:
return MyEnumValue2String;
...
}
}
或者使用一些字典或哈希值和字符串集。
string
枚举在C#中不存在。请参阅此相关问题。
为什么不使用int
(枚举的默认类型)而不是string
?