我正在解析一个文本项目,其中,我必须匹配文本匹配并从文本中获取关键字并相应地执行一些操作。
现在,我正在尝试使用枚举来匹配文本Eg。所有的条件,任何条件,没有,改变一个,或者等等。我正在尝试使用枚举,因为关键词可能会在以后改变, 是否可以在枚举中存储字符串值。
public enum condition
{
type1 = "all the conditions",
type2 = "any of the conditions"
}
我知道它不像普通的枚举使用,可以任何人帮助
答案 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.
他们的默认基础类型为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
中的有效索引)。