【发布时间】:2016-03-01 11:59:37
【问题描述】:
来自MSDN doc:
public bool Contains(
string value
)
返回值:true 如果 value 参数出现在这个字符串中,或者如果 value 是空字符串 ("");否则,false。
例外:ArgumentNullException:value 为 null。
例子:
string s = string.Empty; //or string s = "";
Console.WriteLine(s.Contains("Hello World!")); //output: False
如果我将其更改为:
try
{
string s = null; //or string s;
Console.WriteLine(s.Contains("Hello World!"));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
它会抛出一个错误消息:Object reference not set to an instance of an object 因为string 没有来自Default Values Table (C# Reference) 的默认值(如""),
请回到示例,如果我声明s,代码将起作用:
string s = "";
现在,Object s 被设置为一个对象的实例。
所以,我的问题是:MSDN 是否忘记了类似:s 不能为 null?
为了检查,我试过了:
string s = null;
Console.WriteLine(!string.IsNullOrEmpty(s) ? s.Contains("Hello World!") : false);
它应该可以工作。
【问题讨论】:
-
不允许在
null上调用方法。