2017-10-05 75 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