Visual Studio 2005 - 没有检查

时间:2012-02-21 08:07:25

标签: vb.net visual-studio-2005

请告诉我为什么这行代码会出错: - "对象引用没有设置为对象的实例"

 searchstr = IIf(
    Not searchstr Is Nothing
    AndAlso searchstr.Length > 0,
    searchstr.Replace("Desig_id", "designation_id"), "")  

您还可以提供进行此类验证的替代方法吗?

3 个答案:

答案 0 :(得分:6)

IIf函数的行为并不像您认为的那样。它不是不是三元式运算符,而是C ++或C#。这只是一个普通的函数,这意味着在将searchstr.Replace传递给IIf之前,它们的条件检查都会被评估。如果searchstr为null,则searchstr.Replace(...)将抛出NullReferenceException,即使您预计根本不会调用它。

在VS2008中添加了If运算符以支持此功能,但如果您在2005年,则必须将其扩展为If / Else块:

If Not searchstr Is Nothing AndAlso searchstr.Length > 0 Then
    searchstr = searchstr.Replace("Desig_id", "designation_id")
Else
    searchstr = ""
End If

答案 1 :(得分:1)

iif是一个函数,而不是像c#这样的运算符? 这意味着没有表达短路。 此外,您的代码应如下所示:

searchstr = IIf(
    String.IsNullOrEmpty(searchstr),
    searchstr.Replace("Desig_id", "designation_id"), "")  

答案 2 :(得分:0)

为了便于阅读,您可能最好将其编写为

If string.isnullorempty(searchstr) Then
  searchstr.Replace("Desig_id","designation_id")
else
  searchstr = string.empty
End if

isnullorempty检查长度和字符串是否已初始化。