如何在枚举C#中设置字符串

本文关键字:设置 字符串 枚举 | 更新日期: 2023-09-27 18:22:25

我想在c#中创建字符串ENUM

基本上我不想在Enum中设置表单名称。当我在主页中打开表单时,我想切换表单名称的大小写并打开那个特定的表单。我知道ENUM只允许整数,但我想把它设置为string。有什么想法吗?

如何在枚举C#中设置字符串

枚举不能是字符串,但您可以附加属性,然后可以读取枚举的值,如下所示。。。。。。。。。。。。。。。。。。。。

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