Ich habe ein enum
mit dem [Flag]
Attribut definiert.Verwenden von Where on Enum-Werten
Bei einem ganzzahligen Wert würde ich gerne alle enum
Werte für die Bits ausgeben, die im Ganzzahlwert gesetzt sind.
Hier ist, was ich bisher habe.
string s = string.Join(", ", Enum.GetValues(typeof(MyEnumType)).OfType<Enum>()
.Where(x => (MyIntValue & (int)x) != 0));
Aber die Typumwandlung zu int
in der letzten Zeile gibt mir die folgende Fehlermeldung.
Kann nicht Typ 'System.Enum' auf 'int'
Ich möchte konvertieren Microsoft alle Framework-Code ersetzen würde, die Array
für Typen zurückgibt, die LINQ unterstützen.
Aber gibt es eine einfache Möglichkeit, dies zu tun?
Warum nicht '.OfType()' statt '.OfType ()'? –
Wenn Sie Ihren int-Wert an Enum übergeben und ToString() aufrufen, sollten Sie genau das tun, was Sie wollen. Siehe http://stackoverflow.com/questions/8447/what-does-the-flags-enum-attribute-mean-in-c?rq=1 – devio
"Ich wünschte, Microsoft würde den gesamten Framework-Code, der Array zurückgibt, ersetzen von Typen, die LINQ unterstützen. " - Und was sollten sie mit all dem Legacy-Code tun, der vor Linq geschrieben wurde? Lassen Sie den ganzen Code, der über die Jahre entwickelt wurde, plötzlich brechen? –