Perché non è possibile aprire i tipi generici come parametri. Ho spesso classi come:C# Perché non è possibile aprire i tipi generici come parametri?
public class Example<T> where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
}
Diciamo che BaseClass è come segue;
public BaseClass
{
public int num;
}
Allora voglio un metodo di dire:
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;
}
Poi ho dovuto scrivere un'interfaccia solo per passare questo una classe come parametro come segue:
public interface IExample
{
public int a {get; set;}
public IEnumerable<BaseClass> myIEnum {get;}
}
il generico la classe deve essere modificata in:
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;} }
}
Questo è un sacco di cerimonie per quello che avrei pensato che il compilatore potesse dedurre. Anche se qualcosa non può essere cambiato, trovo psicologicamente molto utile se conosco le ragioni/giustificazioni per l'assenza di scorciatoie di sintassi.
Non è molto chiaro di quale restrizione stai parlando, poiché non hai mostrato come stai cercando di passarlo. Sospetto * Ho un'idea di cosa intendi, ma la domanda non è chiara ... –
Cosa intendi quando chiedi "[come aprire] un tipo generico"? –
@Rich, come passarebbe sintatticamente 'Esempio' (anche in linea di principio) se 'T' non è stato specificato? –