nos*_*lan 16 c# dynamic roslyn c#-6.0
我一直在研究C#6中的零传播运算符,并尝试使用dynamic类型的变量,但没有成功.考虑下面的代码,它会编译,但是AccessViolationException当将null传播应用于动态对象时,CLR会在运行时抛出.
class SomeType
{
public object SomeProperty { get; set; }
static void Main()
{
var obj = new SomeType() { SomeProperty = "ABCD" };
var p1 = ((dynamic)obj).SomeProperty; //OK, p1 is set to "ABCD"
var p2 = ((dynamic)obj)?.SomeProperty; //AccessViolationException
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
起初我认为这可能是一个错误,但后来我想到了structs.通常,您不能将?.运算符应用于值类型变量(因为它不能为null).但是您可以将其转换为dynamic然后应用运算符.所以我改成SomeType了struct并得到了同样的例外.
问题是,根据设计,动态变量的零传播总是会抛出异常,因为底层对象可能是值类型?
AccessViolationException无论如何,这是非常丑陋的,当你运行代码时,你得到相同的一个吗?
| 归档时间: |
|
| 查看次数: |
755 次 |
| 最近记录: |