Por que o compilador emite instruções da caixa para comparar instâncias de um tipo de referência?
Aqui está um tipo genérico simples com um parâmetro genérico exclusivo restrito aos tipos de referência:
class A<T> where T : class
{
public bool F(T r1, T r2)
{
return r1 == r2;
}
}
O geradoIL por csc.exe é:
ldarg.1
box !T
ldarg.2
box !T
ceq
Portanto, cada parâmetro éencaixotado antes de prosseguir com a comparação.
Mas se a restrição indicar que "T" nunca deve ser um tipo de valor,por que o compilador está tentando encaixotarr1
er2
?