特定于Unbox的struct成员

时间:2016-05-11 23:21:15

标签: c#

在以下示例中,我可以装箱 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;
        }
    }

2 个答案:

答案 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 };