你调用的对象是空的。

时间:2011-11-21 03:01:46

标签: c#

运行程序时,我一直收到此错误。

  

对象引用未设置为对象的实例。   描述:执行当前Web请求期间发生未处理的异常。   请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。   异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

Source Error:

Line with error:

Line 156:        if (strSearch == "" || strSearch.Trim().Length == 0)

应该写出正确的方法是什么?

4 个答案:

答案 0 :(得分:102)

.NET 4.0中的正确方法是:

if (String.IsNullOrWhiteSpace(strSearch))

上面使用的String.IsNullOrWhiteSpace方法相当于:

if (strSearch == null || strSearch == String.Empty || strSearch.Trim().Length == 0) 
// String.Empty is the same as ""
  

IsNullOrWhiteSpace方法的参考

     

http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx

     

指示指定的字符串是Nothing,empty还是contains   只有空白字符。

在早期版本中,您可以执行以下操作:

if (String.IsNullOrEmpty(strSearch) || strSearch.Trim().Length == 0)

上面使用的String.IsNullOrEmpty方法相当于:

if (strSearch == null || strSearch == String.Empty)

这意味着您仍然需要根据示例检查.Trim().Length == 0的“IsWhiteSpace”案例。

  

IsNullOrEmpty方法的参考

     

http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx

     

指示指定的字符串是Nothing还是Empty字符串。

<强>解释

在使用点字符(strSearch)取消引用之前,您需要确保null(或任何变量)不是. - 即在{{1}之前或strSearch.SomeMethod()您需要检查strSearch.SomeProperty

在你的例子中,你想确保你的字符串有一个值,这意味着你要确保字符串:

  • 不为空
  • 不是空字符串(strSearch != null / String.Empty
  • 不仅仅是空白

在上述情况中,您必须将“它是否为空?”首先是情况,因此当字符串为""时,它不会继续检查其他情况(和错误)。

答案 1 :(得分:5)

在这种情况下,

strSearch可能为null(不仅仅是空的)。

尝试使用

String.IsNullOrEmpty(strSearch)

如果您只是想确定该字符串是否没有任何内容。

答案 2 :(得分:5)

我知道这是大约一年前发布的,但这是供用户参考的。

我遇到过类似的问题。在我的情况下(我会尽量简短,如果你想了解更多细节,请告诉我),我试图检查字符串是否为空(字符串是电子邮件的主题)。无论我做什么,它总是返回相同的错误消息。我知道我做得对,但它仍然不断抛出相同的错误信息。然后我突然意识到,我正在检查电子邮件(实例/对象)的主题(字符串),如果电子邮件(实例)在第一个位置已经是空的话。我怎么能检查电子邮件的主题,如果电子邮件已经是空的..我检查了如果电子邮件是空的,它工作正常。

在检查主题时(字符串)我使用了IsNullorWhiteSpace(),IsNullOrEmpty()方法。

if (email == null)
{     
     break;    
}
else
{    
     // your code here    
}

答案 3 :(得分:1)

我想通过说你可以为这个功能创建一个扩展方法来扩展MattMitchell的答案:

public static IsEmptyOrWhitespace(this string value) {
    return String.IsEmptyOrWhitespace(value);
}

这使得可以打电话:

string strValue;
if (strValue.IsEmptyOrWhitespace())
     // do stuff

对我而言,这比调用静态String函数要清晰得多,同时仍然是NullReference的安全!