簡體   English   中英

C#coalesce運算符不替換null方法返回值?

[英]C# coalesce operator doesn't replace a null method return value?

我有這個代碼:

MyClass _localMyClass = MyClassDAO.GetMyClassByID(123) ?? new MyClass();

這是方法:

    public static MyClass GetMyClassByID(int id)
    {
        var query = from m in ctx.MyClass
                    where m.MyClassID == id
                    select m;

        return query.FirstOrDefault<MyClass>();
    }

因此, FirstOrDefault()在實體框架上下文中找不到命中,這是“ctx”對象。 因此,要返回的'default'值為null ,因為查詢的目標是一個類。

第一位代碼的結果,使用?? ,結果_localMyClass是什么? 我會說這將是new MyClass() 相反, _localMyClass最終為null。 我嘗試用各種括號分組邏輯,但仍然沒有運氣。

還在; 當我設置調試斷點,並復制/粘貼MyClassDAO.GetMyClassByID(123) ?? new MyClass() MyClassDAO.GetMyClassByID(123) ?? new MyClass()進入Visual Studio的監視屏幕,結果是new MyClass()而不是null

任何人都可以解釋為什么它會以這種方式工作嗎? 為什么它不能將方法返回值識別為null然后使用new部分?

只是一個猜測,因為我之前犯了這個錯誤,它讓我困惑的時間最長。

你有條件斷點嗎?在條件斷點中你有條件_localMyClass = null嗎?

有一次,當我打算在條件斷點中寫入==並且它導致調試器將值設置為null時,我做了類似的事情。 同樣,您是否有任何可以將其設置為null的監視值?

關閉並重新打開Visual Studio后,代碼運行正常。

我正在使用帶有Service Pack 1的Visual Studio Ultimate 2010。

我過去曾經發生過這種情況,應該記得首先嘗試一下。 我注意到VS似乎有時會表現得很奇怪,特別是在調試中運行Web應用程序時,特別是在本地運行Web應用程序(從我的本地IIS)並附加到w3wp.exe時。

好的,既然已經接受了自我回答,那么如果有人在將來需要另一個可能的案例,那么這是一種形式上的答案:

 FirstOrDefault() 

實際上將返回默認值 ,對於引用引用,該默認值可以為null ,但不能是value-types默認值 如果MyClass是一個值類型(想想: struct ),你會更好

  • 檢查泛型方法中的默認值(T)
  • 使用DefaultIfEmpty()擴展名使用特定值
  • 使用MyClass? 可空類型(Nullable的縮寫)

$ 0.02

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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