簡體   English   中英

空傳播算子和動態變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM