空字符串是空引用?

B. *_*non 3 c# string versioninfo nullreferenceexception winforms

为什么这个代码(在我的表格的_Load()事件中):

FileVersionInfo vi = FileVersionInfo.GetVersionInfo(_fullPath);
String VersionInfo = vi.FileVersion;
if (VersionInfo.Trim().Equals(String.Empty)) {
    VersionInfo = NO_VERSION_INFO_AVAILABLE;
}
textBoxVersionInfo.Text = VersionInfo;
Run Code Online (Sandbox Code Playgroud)

...给我以下的错误信息VersionInfo == ""是真的吗?

System.NullReferenceException未处理Message = Object引用未设置为对象的实例.*

ABH*_*ABH 7

你应该String.IsNullOrEmpty在这里使用方法.请参阅MSDN

if (String.IsNullOrEmpty(VersionInfo)) {
    VersionInfo = NO_VERSION_INFO_AVAILABLE;}
Run Code Online (Sandbox Code Playgroud)


小智 5

好吧,由于我在另一个问题上获得了荒谬的否定票数,因此这里的情况再次变得更加平淡而轻松:

  • null代表缺少一个对象 ; 和
  • 所有的弦都是对象 ; 从而
  • 没有任何长度的字符串null;从而
  • 空字符串永远不会null

就是这样,仅此而已。检查堆栈跟踪和/或附加一个调试器,找出其中null(这是不是一个空字符串)是来自哪里。

例外是使用expr.somePropertyFieldOrMethodwhere 的结果exprnull1的结果,因此使用了Null Reference Exception

它的工作,你的开发者,以找出哪些 exprnull不是等着看别人的建议可能是错的。因此,在回答标题中的问题后,我将其关闭为“过于本地化”。

(正如我以前的答案,我注意到,textBoxVersionInfo存在null可能导致这个例外,即使VersionInfo == ""是真实的。另一种方法是,当然,这 VersionInfo代表空字符串。)


1从技术上讲,此异常可以任意提出,也许可以通过扩展方法来证明。但是,肆意引发此异常并不常见,也不是一种很好的做法,也不是在.NET框架中发现的,因此通常在调试时是可以忽略的。