在 C# 中,在值类型上调用对象函数(如 Equals() 和 ToString())是否意味着编译器将执行自动装箱来执行操作。例如。下面的代码会发生自动装箱吗?
int x=2;
int y=7;
bool isEqual = x.Equals(y);
最佳答案
没有。
static void DoIt()
{
int x = 2;
int y = 7;
bool isEqual = x.Equals(y);
Console.WriteLine(isEqual);
}
将成为:
IL_0002: stloc.0
IL_0003: ldc.i4.7
IL_0004: stloc.1
IL_0005: ldloca.s x
IL_0007: ldloc.1
IL_0008: call instance bool [mscorlib]System.Int32::Equals(int32)
IL_000d: stloc.2
IL_000e: ldloc.2
IL_000f: call void [mscorlib]System.Console::WriteLine(bool)
不存在 box
IL 操作码,因此不会发生装箱。
如您所见,它调用 Int32.Equals(Int32)不需要任何装箱的方法 - 它接受非装箱的 Int32 结构作为参数。还有Int32.Equals(Object) - 这个需要拳击。
关于c# - 在值类型上调用对象函数是否会导致自动装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24598605/