A cosa mai potrebbe servire?:
IList Create( T obj ) 
{
return new List();
}
A prima vista a nulla, soprattutto il parametro “obj” che viene completamente ignorato… Smile, ma se saltiamo di palo in frasca e facciamo una cosa curiosa del genere:
static void Main( string[] args )
{
var a = new { SampleProperty = "mauro" };
var b = new { SampleProperty = "mauro" };

Console.WriteLine( a.GetType() == b.GetType() ); //true...
Console.WriteLine( a.GetType().IsAssignableFrom( b.GetType() ) ); //true...
Console.WriteLine( b.GetType().IsAssignableFrom( a.GetType() ) ); //true...

Console.Read();
}
Allora potremmo dire che anche questo funziona:
static void Main( string[] args )
{
var list = Create( new { SampleProperty = "" } );
list.Add( new { SampleProperty = "mauro" } );

var item = list.First();
Console.WriteLine( item.SampleProperty );

Console.Read();
}
Figo Smile with tongue out stiamo usando il primo “anonymous type” come template per il tipo T del metodo “Create” creando a tutti gli effetti una lista di “anonymous types” fortemente tipizzata.
.m