Следующий фрагмент кода извлекается из примера 10-11 (р 343.) От программирования C# 5.0:Зачем компилировать общий код без ограничения 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;
}
Я не могу понять, как она могла бы компилируются, не подвергая какой-либо информации о T
путем применяя к нему ограничения. В частности, как мог компилятор узнать, сколько байтов выделяется для массива, учитывая, что T
может не быть ссылочным типом, но тип значения (то есть, struct
)? Кроме того, семантика операции присваивания result[i] = map(cultures[i])
, по-видимому, зависит от того, является ли T
ссылочным типом или типом значения.
«сколько байтов выделять для массива» Должен ли компилятор знать это раньше времени? – BoltClock
Не уверен, правильно ли я понял вопрос, но я думаю, что компилятор JIT знает все, что вы говорите. –