先看一段代码:
string name = null;
Session["name"] = name;
string out1 = Convert.ToString(name);
string out2 = Convert.ToString(Session["name"]);
你们觉得out1与out2应该是输出什么?是null值?还是空字符串?
嘿嘿,都不是,out1输出null,our2输出空字符串。
看看MS的代码就知道了:
public static string ToString(string value)
{
return value;
}
public static string ToString(object value)
{
return Convert.ToString(value, (IFormatProvider) null);
}
public static string ToString(object value, IFormatProvider provider)
{
IConvertible convertible1 = value as IConvertible;
if (convertible1 != null)
{
return convertible1.ToString(provider);
}
if (value != null)
{
return value.ToString();
}
return string.Empty;
}
其它一些以基元类型值类型做参数的都是直接调用其.ToString方法,因为值类型不能为null。
这不是一个大的Bug,不过却应该算是一个Bug。毕竟这违反了重载的一致性。