Używam poniższego kodu. Jest przeznaczony dla określonego typu, aby je ograniczyć to popup-ności w intellisense itpMetoda rozszerzenia dla dokładnie dwóch różnych typów
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
Teraz chciałbym korzystać z tego samego Get metody dla innego typu (lub być w pełni pokryte, kilka inny typy, ale wciąż stała liczba). Dlatego dodałem drugą metodę, a kod wygląda następująco.
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
public static Generic Get<Generic>(this Entity2 input)
{
return (Generic)input;
}
Wydaje mi się, że lepszym rozwiązaniem byłoby, aby utrzymać go w tym samym ciele metody i nadal obejmować wszystkie uznane typy. Czy istnieje składnia do włączenia np. dwa różne typy w podpisie? Coś podobnego do tego pseudo-kod poniżej.
public static Generic Get<Generic>(this [Entity, Entity2] input)
{
return (Generic)input;
}
Najlepszym podejściem mogę myśleć, jak pokazano poniżej, składa się z metody wejścia dla każdego typu i logiki w prywatnym miejscu. Ma sens, gdy logika jest obszerna, ale wygląda na zbędną, gdy jest tylko jedna lub dwie.
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;
}
Na pewno pójdę z ostatnim podejściem, czy też położę na obiekcie? –
czy jest coś wspólnego między 'Entity' i' Entity2'? –
Czy kontrolujesz źródło zajęć EntityX? Jeśli tak, możesz utworzyć interfejs znacznikowy (pusty) i tylko te klasy implementują interfejs. Następnie wpisz "ten" typ parametru metody rozszerzenia tego interfejsu. – user469104