我在C#控制台应用程序中有foo(object)和foo2(string).代码2抛出异常,而代码1正常工作.
你能解释为什么它的表现如此(有MSDN参考)?
//代码1
object foo = null;
string test = Convert.ToString(foo).Substring(0, Convert.ToString(foo).Length >= 5 ? 5 : Convert.ToString(foo).Length);
Run Code Online (Sandbox Code Playgroud)
//代码2
string foo2 = null;
string test2 = Convert.ToString(foo2).Substring(0, Convert.ToString(foo2).Length >= 5 ? 5 : Convert.ToString(foo2).Length);
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 33
来自以下文件Convert.ToString(string):
返回值
类型:System.String
值返回不变.
因此null输入将产生null返回值.
来自以下文件Convert.ToString(object):
返回值
类型:valueSystem.String
的字符串表示形式,如果value为null.String.Empty
(这里"Nothing"的意思是"null".)
因此null输入将导致空字符串(非空引用)返回值.
因为:
这是 Convert.ToString(object value) 的实现
public static string ToString(Object value) {
return ToString(value,null);
}
public static string ToString(Object value, IFormatProvider provider) {
IConvertible ic = value as IConvertible;
if (ic != null)
return ic.ToString(provider);
IFormattable formattable = value as IFormattable;
if (formattable != null)
return formattable.ToString(null, provider);
return value == null? String.Empty: value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这是 Convert.ToString(string value)
public static String ToString(String value) {
Contract.Ensures(Contract.Result<string>() == value); // We were always skipping the null check here.
return value;
}
Run Code Online (Sandbox Code Playgroud)