如何在Enum C#中设置字符串?

时间:2012-02-03 09:16:44

标签: c# .net enums

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

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

7 个答案:

答案 0 :(得分:18)

枚举不能是字符串,但你可以附加属性,你可以读取枚举的值如下....................

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

如果你想通过它,那么这篇文章很好:Associating Strings with enums in C#

答案 1 :(得分:5)

正如大家所提到的,枚举不能是C#中的字符串(或除整数之外的任何其他内容)。我猜你来自Java?如果.NET具有此功能,那将是很好的,其中枚举可以是任何类型。

我通常绕过这种方式的方法是使用静态类:

public static class MyValues
{
    public static string ValueA { get { return "A"; } }
    public static string ValueB { get { return "B"; } }
}

使用此技术,您还可以使用任何类型。您可以像使用枚举一样调用它:

if (value == MyValues.ValueA) 
{
    // do something
}

答案 2 :(得分:2)

这样做:

private IddFilterCompareToCurrent myEnum = 
(IddFilterCompareToCurrent )Enum.Parse(typeof(IddFilterCompareToCurrent[1]),domainUpDown1.SelectedItem.ToString());

[Enum.parse]返回一个Object,因此您需要将其强制转换。

答案 3 :(得分:2)

我不确定我是否理解正确,但我认为你在寻找这个?

   public enum State { State1, State2, State3 };

    public static State CurrentState = State.State1;

    if(CurrentState ==  State.State1)
    {
    //do something
    }

答案 4 :(得分:2)

我不认为枚举是您问题的最佳解决方案。正如其他人已经提到的那样,枚举的值只能是整数值。

您只需使用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));

答案 5 :(得分:2)

使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;

        ...
    }
}

或者使用一些字典或散列值和字符串。

答案 6 :(得分:1)

C#中不存在

string枚举。请参阅this related question

为什么不使用int(枚举的默认类型)而不是string