Dies ist eine grundlegende Frage, die ich kenne, und sicherlich ein Redo eines alten Rezepts von jedem auf der Erde und darüber hinaus gemacht, aber ich bin so verloren, dass ich etwas externes brauche Rat.Flags und enum um eine linq anyFlags zu erstellen (MyFlag)
Ich habe eine Enumeration wie diese:
[Flags]
public enum MyEnum
{
none=0, //0000
toto=1, //0001
tata=2, //0010
tati=4, //0100
titi=8 //1000
}
und ich habe einen Enum-Wert, wie ist:
MyEnum s= tata | titi; //(1010)
, um von zu sagen, was ich s verstanden = 10
Jetzt habe ich einen Wert in meiner Datenbank, der ein kurzer ist und einer dieser sein könnte, zB: 1,2,3,4,5,6,7,8,9,10,11,12,13,14, 15
id EnumValue
1 3
2 14
3 10
4 9
5 0
Jetzt muss ich eine Linq-Anweisung zu sagen, welche ID mindestens eine andere enum in s gegeben haben.
Ich würde am Ende benötigen: 1,2,3,4.
Ich habe so für Thesen Methode durchgeführt:
public static bool HasAllFlags(this short input, Enum matchTo)
{
return (Convert.ToUInt32(input) & Convert.ToUInt32(matchTo)) == Convert.ToUInt32(matchTo);
}
public static bool IsFlag(this short input, Enum matchTo)
{
return Convert.ToUInt32(input)== Convert.ToUInt32(matchTo);
}
aber mich mit diesem steckte:
public static bool HasAnyFlags(this short input, Enum matchTo)
{
return ....????....;
}
Sie ziemlich gut funktionieren, aber ich brauche ich jetzt diese Methode, die mir geben würde, 1,2,3,4 als das gewünschte Ergebnis. Ich habe einige Dinge ausprobiert, aber ich kann es nicht richtig machen. Hat jemand von Ihnen irgendwelche Lösungen dafür bereit?
Vielen Dank im Voraus,
PS: I C# 3.5
das wird nicht funktionieren. Wenn die Eingabe ein Flag hat, das in matchTo nicht angegeben ist, ist der Wert von AND ebenfalls nicht Null. – Bryan
@Bryan nicht ganz mit dir, könntest du ein Beispiel geben? – AakashM
Danke für die nette Erklärung AakashM! – Arthis