为什么这段代码(在我的表单的_Load()
事件中):
FileVersionInfo vi = FileVersionInfo.GetVersionInfo(_fullPath);
String VersionInfo = vi.FileVersion;
if (VersionInfo.Trim().Equals(String.Empty)) {
VersionInfo = NO_VERSION_INFO_AVAILABLE;
}
textBoxVersionInfo.Text = VersionInfo;
...当VersionInfo == ""
为真时,给我以下错误消息?
System.NullReferenceException未处理 Message =对象引用未设置为对象的实例。*
答案 0 :(得分:7)
您应该在此处使用String.IsNullOrEmpty
方法。 See MSDN
if (String.IsNullOrEmpty(VersionInfo)) {
VersionInfo = NO_VERSION_INFO_AVAILABLE;}
答案 1 :(得分:5)
好吧,因为我在另一个问题上得到了一些荒谬的票数,所以这里又是一种更直率,更轻松的方式:
null
代表对象的缺少 ;和null
;从而null
。 就是这样,仅此而已。 检查堆栈跟踪和/或附加调试器以找出其中 null
(不< / em>一个空字符串)来自。
例外是使用expr.somePropertyFieldOrMethod
expr
评估null
1 的结果,因此 空引用 例外。
你(开发人员)的工作是找出哪个 expr
是null
,而不是等着看其他人的建议可能是错的。因此,在回答标题中的问题后,我将其视为“过于本地化”,这是唯一存在的问题。
(正如我之前的回答,我注意到textBoxVersionInfo
null
可能会导致此异常,即使VersionInfo == ""
为真。另一种选择当然是 VersionInfo
不代表空字符串。)
1 从技术上讲,这个例外可以任意提出,也许在扩展方法中是合理的。但是,大肆提高此异常是不是常见或良好实践,或者在.NET框架中找到,因此在调试时通常是一个不允许的原因。
答案 2 :(得分:2)
如果VersionInfo is NULL
为真,则 VersionInfo.Trim()会出错。
请使用String.IsNullOrEmpty
。
如果VersionInfo为null,则可以使用
进行检查if(VersionInfo == null)
或
String.IsNullOrEmpty(VersionInfo)
答案 3 :(得分:2)
有一种null
- 安全的方法:而不是
VersionInfo.Trim().Equals(String.Empty)
写
string.IsNullOrWhiteSpace(VersionInfo)
如果VersionInfo
为空,它不会崩溃,如果修剪VersionInfo
导致空字符串,它将返回true。
答案 4 :(得分:1)
在您回复我的评论后,您知道VersionInfo
为空。对Trim()的调用失败,因为它将在检查之前执行,如果它等于String.Empty
。
您应该使用(string.IsNullOrEmpty(VersionInfo) || VersionInfo.Trim().Length < 1)
代替(string.IsNullOrWhiteSpace(VersionInfo)
,如果您使用的是.NET 4)。
修改强>
在看到您对另一个答案的回复后,您删除了Trim()并且它仍然无法正常工作......此时,它将是中断调用。尝试上面提到的代码,它应该可以正常工作。