[英]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
),你會更好
MyClass?
可空類型(Nullable的縮寫) $ 0.02
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.