Por qué los tipos genéricos no se pueden pasar como parámetros. Con frecuencia tengo clases como:C# ¿Por qué no se pueden pasar los tipos genéricos como parámetros?
public class Example<T> where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
}
Digamos que BaseClass es el siguiente;
public BaseClass
{
public int num;
}
que luego quieren un método de ejemplo:
public int MyArbitarySumMethod(Example example)//This won't compile Example not closed
{
int sum = 0;
foreach(BaseClass i in example.myList)//myList being infered as an IEnumerable
sum += i.num;
sum = sum * example.a;
return sum;
}
entonces tengo que escribir una interfaz sólo para pasar ésta clase como un parámetro de la siguiente manera:
public interface IExample
{
public int a {get; set;}
public IEnumerable<BaseClass> myIEnum {get;}
}
El genérica clase entonces tiene que ser modificado a:
public class Example<T>: IExample where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
public IEnumerable<BaseClass> myIEnum {get {return myList;} }
}
Esa es una gran ceremonia por lo que pensé que el compilador podría inferir. Incluso si no se puede cambiar algo, creo que es psicológicamente muy útil si conozco las razones/justificaciones de la ausencia de atajos de sintaxis.
No está claro de qué restricción está hablando, ya que no ha demostrado cómo está tratando de pasarla. I * sospecho * Tengo una idea de lo que quieres decir, pero la pregunta no está clara ... –
¿Qué quieres decir cuando preguntas "[cómo] abrir un tipo genérico"? –
@Rich, ¿cómo pasaría sintácticamente el 'Example' (incluso en principio) si 'T' seguía sin especificar? –