我有三种枚举类型(enum1
,enum2
,enum3
),其值可能包含_
个字符,以及模式的字符串s
{ {1}}。
现在,我想分析字符串"enum1_enum2_enum3"
以获取枚举类型的三个值。
有没有一种有效的方法呢?
修改 一个例子:
s
解析后我应该得到:
enum enum1 {A_1 ,B_1, C_1}
enum enum2 {A_2, B_2, C_2}
enum enum3 {A_3, B_3, C_3}
string s = "A_1_B_2_C_3";
答案 0 :(得分:1)
好的,解决办法可以是:
onClick()
完成这些后,为结果创建一个占位符:
// your enumeration declaration ...
private enum enum1 { A_1, B_1, C_1 }
private enum enum2 { A_2, B_2, C_2 }
private enum enum3 { A_3, B_3, C_3 }
// string to process
private static string s = "A_1_B_2_C_3";
// parsing result structure
private struct ParsingResult
{
public Type enumType;
public object enumValue;
}
然后迭代这些结果来处理字符串:
ParsingResult[] results = new ParsingResult[] {
new ParsingResult() { enumType = typeof(enum1) },
new ParsingResult() { enumType = typeof(enum2) },
new ParsingResult() { enumType = typeof(enum3) }
};
当然它会返回for (int i = 0; i < results.Length; i++)
{
results[i].enumValue = Enum.GetNames(results[i].enumType).Select(value =>
{
int cIteration = 0;
while (cIteration < s.Length && cIteration + value.Length <= s.Length)
{
string toProcess = s.Substring(cIteration, value.ToString().Length);
cIteration += value.ToString().Length + 1;
try
{
object valid = Enum.Parse(results[i].enumType, toProcess);
return valid;
}
catch { }
}
return null;
})
.FirstOrDefault(v => v != null);
}
值而非string
,但您可以使用以下内容:
enum
我认为它不会让你在实施方面遇到太多麻烦。
稍后使用:
results[i].enumValue = Enum.Parse(results[i].enumType, results[i].enumValue.ToString());
示例输出应为:
foreach (ParsingResult value in results)
{
Console.WriteLine(value.enumValue);
}
编辑:
我不得不稍微修改一下,因为它没有按预期工作。以前如果你有:
A_1
B_2
C_3
输出不准确,并显示static string s = "W_4_A_1_B_2_C_3";
和B_2
等值,这意味着它将省略第一个C_3
。现在,在简单编辑之后,它将仅返回有效值。