Ok, quindi io sono un ragazzo Java di iniziare a utilizzare C# ed ero codifica e iniziato a fare un metodo generico e quello che ho scritto corre e compila ma va contro tutto quello che so su come farmaci generici dovrebbero funzionare così sto sperando che qualcuno può spiegare questo a me:C# metodo generico senza specificare Tipo
così ho un metodo generico definito come segue:
public static List<T> CopyAsList<T>(IEnumerable<T> list, Object lockObject)
{
if (list != null)
{
lock (lockObject)
{
return new List<T>(list);
}
}
return null;
}
Ma la cosa strana per me è che posso chiamare questo metodo generico, senza mai specificare T
e funzionerà:
List<String> strings = new List<string>() { "a", "b", "c"};
List<int> ints = new List<int>() { 1,2,3};
object lockObject = new object();
foreach (string s in CopyAsList(strings, lockObject))
{
Console.WriteLine(s);
}
foreach (int i in CopyAsList(ints, lockObject))
{
Console.WriteLine(i);
}
Come è possibile che il codice è in grado di compilare, senza mai specificare il tipo generico? C# deduce il tipo in fase di esecuzione?
non c'è C# più in fase di esecuzione. – Gabe
Il compilatore C# deduce il tipo in fase di compilazione. Da una nota a margine, il CLR (DLR) può inferire il tipo in fase di esecuzione, vedere la parola chiave 'dynamic' da C#. – kizzx2
kizzx2: L'OP etichettato la questione con '.net-3.5' che elimina' dynamic' dal contesto, e in fase di esecuzione non v'è alcun tipo di inferenza - DLR utilizza la riflessione per determinare i tipi. – Gabe