请告诉我为什么这行代码会出错: - "对象引用没有设置为对象的实例"
searchstr = IIf(
Not searchstr Is Nothing
AndAlso searchstr.Length > 0,
searchstr.Replace("Desig_id", "designation_id"), "")
您还可以提供进行此类验证的替代方法吗?
答案 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检查长度和字符串是否已初始化。