Okay, so die Lösung sein kann:
// 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;
}
Nach diesen zu machen, Erstellen Sie einen Platzhalter für die Ergebnisse:
ParsingResult[] results = new ParsingResult[] {
new ParsingResult() { enumType = typeof(enum1) },
new ParsingResult() { enumType = typeof(enum2) },
new ParsingResult() { enumType = typeof(enum3) }
};
Dann durch diese Ergebnisse zu verarbeiten String iterieren:
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);
}
Natürlich ist es string
Wert zurückgeben wird und nicht Ihre enum
aber dies können Sie mit machen:
results[i].enumValue = Enum.Parse(results[i].enumType, results[i].enumValue.ToString());
Und ich denke, es wird dich nicht zu viel Mühe bei der Umsetzung machen.
Später mit:
foreach (ParsingResult value in results)
{
Console.WriteLine(value.enumValue);
}
Beispielausgabe sollte sein:
A_1
B_2
C_3
EDIT:
Ich hatte diese ein wenig zu ändern, da es nicht wie beabsichtigt wurde . Früher, wenn Sie würde:
static string s = "W_4_A_1_B_2_C_3";
Output würde ungenau und zeigen Werte wie B_2
und C_3
was bedeutet, es wird die erste enum
weglassen. Nach der einfachen Bearbeitung werden nur gültige Werte zurückgegeben.
Wollen Sie damit sagen, dass die ENUM-Werte durch die '_' begrenzt sind oder dass die tatsächlichen ENUM-Werte könnte in ihnen' _' –
Sind Sie auf dieses Format gebunden? Könnten Sie die Kommatrennung verwenden? Weil Komma Trennung für '[Flags]' enums eingebaut wird ... heck, könnten Sie wahrscheinlich ersetzen (Unterstrich zu Komma) –
Add Enumeration ist eine Enumeration von Integer-Werten .. meinst du, dass Enum-Elemente themselve den Unterstrich enthalten. d. h. Enum_1 = 0, Enum_2 = 1 – Wheels73