Existe-t-il un moyen d'éviter la mise en boîte d'un argument générique d'une méthode (pas d'interface)?Comment éviter la mise en boîte d'un argument générique
Dans une méthode d'extension factice, j'ai essayé la contrainte where T : class
pour forcer l'interprétation de T
comme au moins un object
sur mais la boxe se produit encore.
public static bool IsNull<T>(this T obj) where T : class
{
return obj == null;
}
Voici le code IL:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: box !!T
IL_0007: ldnull
IL_0008: ceq
IL_000a: stloc.0
IL_000b: br.s IL_000d
IL_000d: ldloc.0
IL_000e: ret
Un indice?
Puisque vous avez interdit que l'argument générique soit un type de valeur, vous ne pouvez jamais créer une situation dans laquelle * est * encadré, car * il s'agit déjà d'un type de référence *. – Servy
C'est pourquoi je ne comprends pas que la ligne 'IL_0002: box !! T' ... – gfache
L'instruction écrira la valeur * si la valeur doit être encadrée *, ce qu'elle ne fera jamais. – Servy