繁体   English   中英

如何在C#中将字符串分配给枚举而不是整数值? [重复]

How can I assign a string to an enum instead of an integer value in C#? [duplicate]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这个问题在这里已有答案:

我正在尝试为枚举分配一个字符串。 像下面的例子:

    enum MyEnum
    {
        frist = "First Value",
        second = "Second Value",
        third = "Third Value"
    }

所以我可以在我的代码中有这样的东西:

MyEnum enumVar = MyEnum.first;
...
string enumValue = EnumVar.ToString();//returns "First Value"

以传统的方式,当我创建一个枚举时,ToString()将返回枚举名称而不是其值。所以这是不可取的,因为我正在寻找一种方法来分配一个字符串值,然后从枚举中获取该字符串值。

5 个回复

您可以在枚举中添加Description属性。

enum MyEnum
    {
        [Description("First Value")]
        frist, 
        [Description("Second Value")]
        second, 
        [Description("Third Value")]
        third,
    }

然后有一个方法来返回您的描述。

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

然后你可以这样做:

   MyEnum enumVar = MyEnum.frist;
   string value = GetEnumDescription(enumVar);

价值将持有“第一价值”

您可能会看到: 在C#中将字符串与枚举关联

你不能枚举的值总是一个整数

您最接近的是具有一组静态属性的静态类

static class MyValues
{
    public static readonly string First = "First Value";
    public static readonly string Second = "Second Value";
    public static readonly string Third = "Third Value";
}

你不能这样做。 enum基于整数,而不是字符串。

枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong。 所以像字符串一样,你唯一能做到的就是

枚举MyEnum {第一,第二,第三}

MyEnum.first.ToString();

或者喜欢使用反射并使用描述作为枚举中字段的属性。

enum MyEnum
{
    FirstValue, //Default Value will be 0
    SecondValue, // 1
    ThirdValue // 2
}

string str1 = Enum.GetName(typeof(MyEnum), 0); //will return FirstValue
string str2 = Enum.GetName(typeof(MyEnum), MyEnum.SecondValue); //SecondValue

如果你需要一个像空格一样的完整字符串,你需要添加描述方法。 否则我建议只创建一个查找字典。

     string value = MyLookupTable.GetValue(1); // First Value
     value = MyLookupTable.GetValue(2); // Second Value
     value = MyLookupTable.GetValue(3); // Third Value

class MyLookupTable
{
    private static Dictionary<int, string> lookupValue = null;

    private MyLookupTable() {}

    public static string GetValue(int key)
    {
        if (lookupValue == null || lookupValue.Count == 0)
            AddValues();

        if (lookupValue.ContainsKey(key))
            return lookupValue[key];
        else
            return string.Empty; // throw exception
    }

    private static void AddValues()
    {
        if (lookupValue == null)
        {
            lookupValue = new Dictionary<int, string>();
            lookupValue.Add(1, "First Value");
            lookupValue.Add(2, "Second Value");
            lookupValue.Add(3, "Third Value");
        }
    }
}
1 在C#中将字符串分配给ArrayList

请告诉我代码的问题 我收到一个错误“对象引用未设置为对象的实例”。 抱歉,但是我是C#的新手。 请忍受我。 谢谢 编辑 :我只想添加一点。 dtMessages变量被声明为类变量。 没有在任何函数中声明它。 您认为这是问题吗? 编辑 :代码 } ...

3 将整数值分配给ArrayList中的字符串

我正在尝试制作纸牌游戏。 它大多数都能工作,但是我很难弄清楚将整数值分配给数组中的字符串元素的有效方法。 从本质上讲,我有一个ArrayList ,每张卡在标准甲板上,每转一圈抓两张。 即使它们是字符串(黑桃王牌等),我也需要它们以某种方式具有数值,以便可以将两张牌进行比较以确定赢家(杰克 ...

4 将整数值分配给字符串。 Android / Java

我是Java和Android的新手,我正在研究一个程序,其中连续有两个EditText。 我想要的第一个edittext是字符串,第二个是分配给该字符串的整数。 为了更具体一点,用户输入Homework和15,我希望保存此数字,以便将来用户输入带有值的作业到Homework中时,该值乘以 ...

6 如何在C#中将此数据字符串分配给Tuple?

我想知道如何将以下返回值((来自圆检测功能的图像名称,[X_cord,Ycord,半径])分配给我定义的数据结构。我的返回数据流如下:(方括号是以“ \\ r \\ n”分隔。 我想分配返回值以遵循数据结构: 最好的方法是什么? 问候,普布杜 ...

2019-03-05 17:23:31 1 56   c#/ tuples
10 如何在C#中将字符串类型传递给方法或分配给变量?

使用==和!=运算符时,字符串对象的行为类似于Value类型,这意味着将检查实际对象而不是引用。 参数传递,赋值和复制呢? 字符串参数传递:将引用类型传递给方法时,将复制其引用,但基础对象保持不变。 关于C#中的String类型,这也适用吗? 我的意思是在下面的代码中将有2个 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM