Leggendo questo , ho imparato che era possibile consentire a un metodo di accettare parametri di più tipi rendendolo un metodo generico. Nell'esempio, il seguente codice viene utilizzato con un vincolo di tipo per garantire che "U" sia un IEnumerable<T>
.
public T DoSomething<U, T>(U arg) where U : IEnumerable<T>
{
return arg.First();
}
Ho trovato un po 'di codice in più che ha permesso di aggiungere più vincoli di tipo, come ad esempio:
public void test<T>(string a, T arg) where T: ParentClass, ChildClass
{
//do something
}
Tuttavia, questo codice sembra imporre che arg
deve essere sia un tipo di ParentClass
e ChildClass
. Quello che voglio fare è dire che arg potrebbe essere un tipo di ParentClass
o ChildClass
nel modo seguente:
public void test<T>(string a, T arg) where T: string OR Exception
{
//do something
}
Il tuo aiuto è apprezzato come sempre!
where T : string
, come string
è una classe sigillata . L'unica cosa utile che potresti fare è definire i sovraccarichi per string
e T : Exception
, come spiegato da @ Botz3000 nella sua risposta di seguito.
arg
sono quelli definiti da object
- quindi perché non rimuovere semplicemente i generici dall'immagine e creare il tipo di arg
object
? Cosa stai guadagnando?