奇怪的函数__Boxed<int> 用于反编译后的装箱和拆箱

Weird function __Boxed<int> for boxing and unboxing after decompiling

您好,我在反编译可执行文件后试图找到这部分代码的替代品时遇到了一些问题。

我似乎无法在网上的任何地方找到 __Boxed 的 c# 替代品

        DateTime startTime = dev.runningList[0].startTime;
        // ISSUE: variable of a boxed type
        __Boxed<int> day = (System.ValueType) startTime.Day;
        objArray2[0] = (object) day;
        object[] objArray3 = objArray1;

此代码将 startTime.Day 的整数值装箱到一个对象中。您看到 __Boxed<T> 的原因可能是您使用的反编译工具的一个特性。

当您需要将值类型用作对象时,编译器会将其装箱,以便将其视为对象(基于堆)而不是值类型(基于堆栈)。

对于您自己的代码,您不需要将 int 装箱,您可以这样写:

DateTime startTime = dev.runningList[0].startTime;
int day = startTime.Day;
objArray2[0] = day;

将其编译为 IL 时,day 将根据需要由编译器装箱 - 您无需手动装箱。