![](/img/trans.png)
[英]How to use DefaultValueAttribute for property of type object or MyType?
[英]What is the inner difference between (MyType)SomeObj.Property1 and (MyType)(SomeObj.Property1) in C#?
这可能是一个非常la脚的问题,但是我在C#规范中没有找到有关圆括号的参考。 如果该问题的答案很明显,请给我指出spec或msdn。
C#中的(MyType)SomeObj.Property1和(MyType)(SomeObj.Property1)之间的内在区别是什么?
AFAIK,在第一种情况下((x)SomeObj.Property1 cast)-它是对Property1的具体类型(MyType)的引用。 在第二种情况下,此类引用将执行get访问器SomeObj.get_Property1。 如果get访问器有任何副作用(并且经常-确实有副作用),最终可能会导致细微的错误。
有人可以指出具体行为的确切文档吗?
更新:感谢您的指点。 我对这个愚蠢的问题深表歉意-发布此问题后,我发现一个打字错误的例子让我费解了,因此意识到第二种情况的行为不是基于我尝试编译的代码,而是基于先前编译的完全不同的代码。 所以我的问题最初是基于我自己的盲目性...
绝对没有区别。 的.
运算符的绑定比类型转换运算符更紧密,因此多余的括号没有区别。 有关运算符优先级的详细信息,请参见此处 。 有问题的运营商在前两个组中。
它们是等效的。 这由C#语言中的运算符优先级规则确定,在C#语言规范中的第7.2.1章:
的.
运算符在此列表的顶部,强制转换运算符在列表的第二。 的.
运算符“获胜”。 如果需要强制转换,则会使用括号,因为Property1是MyType类的属性:
((MyType)SomeObj).Property1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.