Вот простой общий тип с уникальным общим параметром, ограниченным ссылочными типами:
class A<T> where T : class
{
public bool F(T r1, T r2)
{
return r1 == r2;
}
}
Сгенерированный IL файл csc.exe:
ldarg.1
box !T
ldarg.2
box !T
ceq
Итак, каждый параметр в коробке, прежде чем приступать к сравнению.
Но если ограничение указывает, что "T" никогда не должно быть типом значения, почему компилятор пытается вставить r1
и r2
?