在以下示例中,我可以装箱 struct
名为分数,然后取消装箱特定会员struct
例如分子?
using system;
struct fraction
{
public int numerator;
public int denominator;
}
class Program
{
static void Main()
{
fraction f1;
f1.denominator = 100;
f1.numerator = 10;
object obj = f1;
// initializing f2.
fraction f2 = new fraction();
// Or can unbox the obj to the f2 like this.
f2 = (fraction)obj;
// But if i want to only unbox the numerator member of the struct fraction boxed inside the obj Something like this will not work
f2.numerator = (fraction)obj.numerator;
}
}
答案 0 :(得分:4)
如果不拆箱整个对象,就无法取消装箱的对象的成员或属性。
该对象只能在装箱状态下作为System.Object访问。对原始类型的任何操作都需要拆箱。
答案 1 :(得分:1)
您无法在不拆箱整个对象的情况下取消装箱单个字段。
但也许您只是想访问该字段,并且不确定正确的语法。取消装箱原始对象后,可以通过引用未装箱的值来访问该字段:
fraction f2 = new fraction();
fraction originalFraction = (fraction)obj; // unbox the object
int numerator = originalFraction.numerator; // access the field on the unboxed fraction
f2.numerator = numerator;
您可以使用object initialization将其缩短为一行,但最终它会执行与上述代码相同的操作:
fraction f2 = new fraction { numerator = ((fraction)obj).numerator };