ich in meiner Klasse einige Enum sind bekam, dann ist es so aussieht diese:Set Eigenschaft von String angegeben Aufzählungstyp
public enum A { A1, A2 }
public enum B { B1, B2 }
Problem ist, wenn ich versuche, Elemente aus XML-Datei (jedes Feld von Eigenschaftsnamen zu lesen gegeben und Eigenschaftswert - beide Zeichenfolgen).
Jetzt habe ich meine Methode, die Wert der einzelnen Eigenschaft (es gibt nur einen Teil mit IsEnum überprüfen).
public A classfield
{
get;
set;
}
public bool DynamicallySetItemProperty(string name, string value)
{
// value = "A1" or "A2"; - value given in string.
// name = "classfield"; - name of property.
PropertyInfo p = this.GetType().GetProperty(name);
if (p.PropertyType.IsEnum)
{
var a = (A) Enum.Parse(typeof(A), value);
p.SetValue(this, a);
}
return true;
}
Aber in diesem ich nicht überprüfen, ob Feld A oder B-enum ist.
Gibt es eine Möglichkeit, meine Methode Prüfung Art von ENUM zu machen und dann meine Zeichenfolge zu diesem Enum-Parsing, so etwas wie diese:
public bool DynamicallySetItemProperty(string name,string value)
{
PropertyInfo p = this.GetType().GetProperty(name);
if (p.PropertyType.IsEnum)
{
var a = (p.GetType()) Enum.Parse(typeof(p.GetType()), value); // <- it doesn't work
p.SetValue(this, a);
}
return true;
}
i Eigenschaft für seinen Aufzählungstyp So müssen prüfen, und dann Parsen Sie meinen String-Wert zu diesem Enum-Typ ohne If/Else oder Switch-Anweisung (es ist problematisch, wenn ich eine Menge von Enum-Typen). Gibt es einen einfachen Weg, es zu tun?
var a = Enum.Parse (p.GetType(), Wert); –
Wie sieht die XML-Datei aus? Können Sie nicht den genauen Typ bestimmen (z. B. Tag '')? Einige Serialisierer (z. B. json.net) speichern "Typ" explizit, ansonsten gibt es keine Möglichkeit, "A" von "B" zu unterscheiden, möglicherweise müssen Sie dasselbe tun. Wenn Sie mindestens den Typ "Enum" bestimmen können, können Sie alle Enums auflisten und prüfen, welcher Wert es sein könnte. – Sinatr