Wenn ich eine Erweiterungs-Methode auf Enum mit dem Namen HasFlag
erstelle, versuche ich immer, HasFlag
für eine enum-Instanz aufzurufen, die Erweiterungsmethode und nicht die Instanzmethode. Warum?Warum hat die HasFlag-Erweiterungs-Methode auf Enum Enum.HasFlag?
public static class Extensions
{
public static bool HasFlag(this Enum e)
{
return false
}
}
Mit Code:
public enum Foo
{
A, B, C
}
public void Whatever()
{
Foo e = Foo.A;
if (e.HasFlag())
{
// ...
}
}
Compiliert zu:
public void Whatever()
{
Foo e = Foo.A;
if (Extensions.HasFlag(e))
{
// ...
}
}
Warum der Compiler nicht die Enum.HasFlag
Instanz-Methode verwenden?
Da die Instanz-Methode 'HasFlag' erwartet einen Parameter. Da Sie keine angeben, wird die Erweiterungsmethode aufgelöst. Versuchen Sie 'e.HasFlag (Foo.A);' und sehen Sie. – haim770
Überprüfen Sie in der Tat die [docs] (https://msdn.microsoft.com/en-us/library/dd782536 (v = vs.110) .aspx) und notieren Sie die Signatur. Es unterscheidet sich von Ihrer 'HasFlag' Funktion. Es ist auch nicht sinnvoll, 'HasFlag' zu verwenden, es sei denn, Ihre Enum ist mit dem' FlagsAttribute' gekennzeichnet. –
Huch! Ich schalte den Computer aus und lasse mich schön hinlegen. Vielen Dank! – citizenmatt