2017-10-05 49 views
6

我有這樣的代碼:新的運營商返回null - C#

public ObjectModel.Path GetPath(int pathid) 
{ 
    var path = this.DbContext.Paths.Find(pathid); 
    var app = GetApplicationById(path.ApplicationId.GetValueOrDefault()); 

    var p = new Path 
    { 
     ApplicationId = path.ApplicationId, 
     Id = path.Id, Password = path.Password, 
     UserName = path.UserName, 
     LocalUrl = string.IsNullOrEmpty(path.LocalUrl) ? null : System.IO.Path.Combine(path.LocalUrl, app.Name) 

    }; 


    return p; 
} 

變量p總是null。這是可行的嗎?

這裏是我談論的打印屏幕:

enter image description here

我也嘗試立即窗口,我得到這個:

enter image description here

p不能因爲即時通訊NULL創建它的一個新實例,而它的所有屬性都不爲空。我嘗試清理項目,重新啓動Windows,以管理員身份打開Visual Studio,但沒有發生任何事情。

任何想法爲什麼?

該應用程序在.net 4.0,visual studio 2017 v15.2(26430.13)上運行。

+1

它可能只是你的調試器。你正在調試優化(即釋放模式)嗎?爲了測試理論,只需添加一個空檢查並拋出一個新的'ArgumentNullException',如果在調試時得到異常,那麼它是空的(*我懷疑它是不應該可能的*),如果不是,那麼它就是您的調試器。 – Igor

+0

@Igor不,im在調試模式下。 –

+4

'Path'類是否重寫'ToString',或者是否以名稱以「Debugger」開頭的任何屬性裝飾? – Amy

回答

10

您的變量不爲空。

調試器默認嘗試顯示ToString()方法過載時的內容。在這種情況下,它顯示(可以)Uri或FtpUrl值爲null。

嘗試單擊變量上的小三角形時,將其懸停,然後您會看到變量的全部內容。

+3

好的答案,但有一個狡辯:調試器調用'ToString()',不管它是否被覆蓋,*除非在類型上指定了'DebuggerDisplayAttribute'。 – Amy