Czytając to , dowiedziałem się, że można zezwolić metodzie na akceptowanie parametrów wielu typów, czyniąc ją metodą ogólną. W tym przykładzie poniższy kod jest używany z ograniczeniem typu, aby zapewnić, że „U” to IEnumerable<T>
.
public T DoSomething<U, T>(U arg) where U : IEnumerable<T>
{
return arg.First();
}
Znalazłem więcej kodu, który pozwolił na dodanie wielu ograniczeń typu, takich jak:
public void test<T>(string a, T arg) where T: ParentClass, ChildClass
{
//do something
}
Jednak ten kod wydaje się wymuszać, że arg
musi to być zarówno typ, jak ParentClass
i ChildClass
. Chcę tylko powiedzieć, że argument może być rodzajem ParentClass
lub ChildClass
w następujący sposób:
public void test<T>(string a, T arg) where T: string OR Exception
{
//do something
}
Twoja pomoc jest mile widziana jak zawsze!
where T : string
, ponieważ string
jest to klasa zapieczętowana . Jedyną przydatną rzeczą, jaką możesz zrobić, jest zdefiniowanie przeciążeń dla string
i T : Exception
, jak wyjaśnił @ Botz3000 w jego odpowiedzi poniżej.
arg
są metody zdefiniowane przez object
- dlaczego więc po prostu nie usunąć typów generycznych z obrazu i utworzyć typ arg
object
? Co zyskujesz?