0
有沒有辦法避免拳擊方法(無界面)的一般參數?如何避免裝箱的一般參數
在一個虛擬擴展方法中,我嘗試了約束where T : class
來強制解釋T
至少爲object
,但仍然發生拳擊。
public static bool IsNull<T>(this T obj) where T : class
{
return obj == null;
}
這裏是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
任何線索?
由於您已經禁止從屬於值類型的泛型參數,所以您無法創建* * * *的盒子,因爲*它已經是引用類型*。 – Servy
這就是爲什麼我不明白'IL_0002:box !! T'行... – gfache
如果需要裝箱的值*,它永遠不會包含該值。 – Servy