我可以在不使用临时变量的情况下使用需要强制转换的对象的成员吗?

时间:2014-08-30 17:09:31

标签: c# casting

我想知道是否有某种方法可以在不创建新变量的情况下使用转换对象的方法。换句话说,有没有办法做到这一点:

abstract class event { }

class loop : event
{ 
    public int a;
}

static void main ()
{
     loop l = new loop();
     l.a = 5;
     event e = l; //supposing that 

     System.Console.WriteLine( (loop) (e).a );//error

     loop lcast = (loop) e;
     System.Console.WriteLine( lcast.a );//no error
}

我可以在不创建临时变量(a)的情况下访问字段lcast吗?

2 个答案:

答案 0 :(得分:5)

这是运算符优先级的问题。 .的优先级高于强制转换,因此:

(loop) (e).a

被视为:

(loop) ((e).a)

您希望在成员访问中强制转换然后使用结果 - 因此您需要比成员访问的.更紧密地绑定强制转换:

((loop) e).a

有关完整的C#运算符优先级规则,请参阅MSDN

答案 1 :(得分:1)

是的,你可以。括号有问题。以下应该工作

System.Console.WriteLine(((loop)e).a);

注意:我可以看到您正在使用公共字段,请在生产代码中避免使用。 Use properties instead

event是c#中的保留字,您的代码无法编译。在发布代码时,最好自己测试一次。