如何使用字符串值创建类似枚举的对象?

时间:2012-03-01 04:27:55

标签: c# enums

我正在解析一个文本项目,其中,我必须匹配文本匹配并从文本中获取关键字并相应地执行一些操作。

现在,我正在尝试使用枚举来匹配文本Eg。所有的条件,任何条件,没有,改变一个,或者等等。我正在尝试使用枚举,因为关键词可能会在以后改变, 是否可以在枚举中存储字符串值。

public enum condition 
{ 
    type1 = "all the conditions", 
    type2 = "any of the conditions" 
}

我知道它不像普通的枚举使用,可以任何人帮助

3 个答案:

答案 0 :(得分:4)

您可以使用只读字符串属性:

public class Condition
{
    public static readonly string Type1 = "All_The_Conditions";
    public static readonly string Type2 = "Any_Conditions";
}

像这样使用:

if(condition_variable == Condition.Type1)//will do a string compare here.
{
 ...
}

<强> BUT

然而,上述解决方案不适用于switch语句。在这种情况下,您可以使用const

public class Condition
{//this could be a better solution..
    public const string Type1 = "All_The_Conditions";
    public const string Type2 = "Any_Conditions";
}

您可以像这样使用它:

switch (condition_variable)
{
    case Condition.Type1://can only be done with const
     ....
    break;
}

请参阅this post for static readonly vs const variables.


展开enums (See MSDN)

他们的默认基础类型为int。您可以将基础类型更改为以下整数类型之一:byte, sbyte, short, ushort, int, uint, long, or ulong.


感谢@Bryan和@ R0MANARMY帮助我改进答案。

答案 1 :(得分:3)

您可以使用字典来从枚举(键)映射到字符串(值)。 类似的东西:

Dictionary<Condition, string> dict = new Dictionary<Condition, string>(); 
dict[Condition.Type1] = "all the conditions";

[编辑]:实际上,现在我更仔细地阅读你的问题,我会反过来做。映射应该是从字符串到条件,然后您应该将文本与键值(字符串)进行比较,如果匹配,则获取枚举值。即:

   Dictionary<string, Condition> dict = new Dictionary<string, Condition>(); 
   Condition result = Condition.Invalid;

   bool isFound = dict.TryGetValue(someTextToParse, out result);

有道理吗?

答案 2 :(得分:0)

我认为enum定义必须包含数值,但我可能错了。

处理此问题的另一种方法是使用简单的struct个对象数组:

struct ConditionKeywords
{
    int Key;
    string Value;
}
ConditionKeywords[] keyword = { new ConditionKeywords { Key = 1, Value = "all the conditions } /* ... */ };

一个简单的枚举,可以在代码中访问:

enum ConditionValues
{
    type1 = 1;
}

当然这有可能有多个字符串,这意味着相同的键是双刃剑,所以更简单的方法可能是:

string[] ConditionKeywords { "all the conditions" /* ... */ }

使用上面相同的枚举方法(仅将其限制为ConditionKeywords中的有效索引)。