Ich verwende den folgenden Code. Es ist für eine bestimmte Art entwickelt, um es zu begrenzen, ist Pop-up-ness in intellisense usw.Erweiterungsmethode für genau zwei verschiedene Typen
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
Nun möchte Ich mag die gleichen Get Verfahren für eine andere Art verwenden (oder vollständig abgedeckt werden, ein paar anderen Arten aber immer noch eine feste Anzahl von). Also habe ich eine zweite Methode hinzugefügt und der Code sieht folgendermaßen aus.
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
public static Generic Get<Generic>(this Entity2 input)
{
return (Generic)input;
}
Es scheint mir, dass ein besserer Ansatz es in dem gleichen Methode Körper zu halten wäre und noch alle angesehen Typen abdecken. Gibt es eine Syntax zum Einschließen von z. zwei verschiedene Arten in der Signatur? So etwas wie Pseudocode unten.
public static Generic Get<Generic>(this [Entity, Entity2] input)
{
return (Generic)input;
}
Der beste Ansatz, den ich mir vorstellen kann, wie unten dargestellt, besteht aus einer Eingabemethode für jeden Typ und die Logik in einem privaten Ort. Es macht Sinn, wenn die Logik umfangreich ist, aber irgendwie überflüssig erscheint, wenn es nur ein oder zwei Zeilen sind.
public static Generic Get<Generic>(this Entity input)
{
return CommonLogic(input);
}
public static Generic Get<Generic>(this Entity2 input)
{
return CommonLogic(input);
}
private static Generic CommonLogic(Object input)
{
return (Generic)input;
}
Ich würde sicher mit dem letzten Ansatz gehen oder es auf das Objekt setzen? –
Gibt es irgendetwas gemeinsam zwischen "Entity" und "Entity2"? –
Steuern Sie die Quelle der EntityX-Klassen? Wenn dies der Fall ist, könnten Sie eine (leere) Markierschnittstelle erstellen und nur diese Klassen implementieren die Schnittstelle. Dann muss der Parametertyp für diese Erweiterungsmethode von dieser Schnittstelle sein. – user469104