[英]Null propagation operator and dynamic variable
我一直在研究C#6中的零傳播運算符,並嘗試使用dynamic
類型的變量,但沒有成功。 考慮下面的代碼,它會編譯,但是當將null傳播應用於動態對象時,CLR會在運行時拋出AccessViolationException
。
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();
}
}
起初我認為這可能是一個bug,但后來我想到了struct
。 通常你不能申請?.
運算符到值類型變量(因為它不能為null)。 但您可以將其強制轉換為dynamic
,然后應用運算符。 所以我將SomeType
更改為struct
並得到了相同的異常。
問題是,根據設計,動態變量的零傳播總是會拋出異常,因為底層對象可能是值類型?
無論如何, AccessViolationException
都非常丑陋,在運行代碼時是否獲得相同的內容?
AccessViolationException幾乎總是編譯器錯誤或格式錯誤的PInvoke調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.