解析由多个枚举组成的字符串'值

时间:2017-02-03 10:08:51

标签: c# parsing enums

我有三种枚举类型(enum1enum2enum3),其值可能包含_个字符,以及模式的字符串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";

1 个答案:

答案 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。现在,在简单编辑之后,它将仅返回有效值。