Ich versuche, eine Erweiterungsmethode zu schreiben, die die Funktion HasFactor
der Klasse int
in C# hinzufügen wird. Das funktioniert wunderbar, etwa so:Gibt es eine Möglichkeit, eine Erweiterungsmethode zu schreiben, die für mehrere Typen gilt?
static class ExtendInt
{
public static bool HasFactor(this int source, int factor)
{
return (source % factor == 0);
}
}
class Program
{
static void Main()
{
int i = 50;
int f = 2;
bool b = i.HasFactor(f);
Console.WriteLine("Is {0} a factor of {1}? {2}",f,i,b);
Console.ReadLine();
}
}
Dies funktioniert gut, weil variable i
im Main()
Verfahren oben als int
deklariert wird. Wenn jedoch i
als Int16
oder Int64
deklariert wird, wird die Erweiterungsmethode nur angezeigt, wenn sie explizit als int
oder Int32
umgewandelt wurde.
Ich möchte jetzt die gleiche HasFactor
Methode auf Int16
und Int64
anwenden. Ich würde jedoch lieber keine separaten Erweiterungsmethoden für jeden Typ von int
schreiben. I könnte schreiben Sie eine einzige Methode für Int64
und dann explizit alles als Int64
oder long
zu werfen, damit die Erweiterungsmethode angezeigt wird.
Idealerweise würde ich bevorzugen, dass die gleiche Erweiterungsmethode für alle drei Typen gilt, ohne viel Code kopieren und einfügen zu müssen.
Ist das in C# überhaupt möglich? Wenn nicht, gibt es eine empfohlene Best Practice für diese Art von Situation?
Basierend auf den Eingaben von Eilon und Marc Gravell, denke ich, dass ich eine Erweiterungsmethode für den Typ 'Int64' erstellen werde. Das sollte für das funktionieren, was ich mache. –