Il seguente frammento di codice viene estratto dal Esempio 10-11 (p 343). Da di programmazione C# 5.0:Perché il codice generico dovrebbe compilare senza vincolare T?
public static T[] Select<T>(this CultureInfo[] cultures,
Func<CultureInfo, T> map)
{
var result = new T[cultures.Length];
for (int i = 0; i < cultures.Length; ++i)
{
result[i] = map(cultures[i]);
}
return result;
}
io non riesco a capire come si potrebbe ottenere compilato senza esporre alcuna informazione su T
da applicando i vincoli su di esso. In particolare, in che modo il compilatore può sapere quanti byte allocare per l'array, dato che T
potrebbe non essere un tipo di riferimento, ma un tipo di valore (ad esempio, struct
)? Inoltre, la semantica dell'attività di assegnazione result[i] = map(cultures[i])
sembra dipendere dal fatto che T
sia un tipo di riferimento o un tipo di valore.
"quanti byte allocare per l'array" Il compilatore deve saperlo in anticipo? – BoltClock
Non sono sicuro di aver capito correttamente la domanda, ma penso che il compilatore JIT sappia tutto quello che dici –