先看一段代码: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。毕竟这违反了重载的一致性。

解决方案 »

  1.   

    Session只能保存object,Session不管现在保存string或者其它类型。Session只能当成object来保存。
    变成了:
    object name = null;
    Session["name"] = name;
    string out1 = Convert.ToString(name);
    string out2 = Convert.ToString(Session["name"]);
      

  2.   

    如果第二个方法返回null才有问题呢
      

  3.   

    string name = null;
    Session["name"] = name;
    string out1 = Convert.ToString(name);
    string out2 = Convert.ToString(Session["name"]);
    //**************************************
    string name = null;
    字浮型的能這樣初始化的嗎???
    你用到關鍵字了:)
      

  4.   

    你真伟大,这个"BUG"隐藏这么久,怎么就让你发现了呢?:)
      

  5.   

    我初始化String的习惯是
    String str = String.Empty;
      

  6.   

    不错,呵呵
    学习中的乐趣====CSDN 小助手 V2.0 2005年10月16日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx
    下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!
    拒绝日货。
      

  7.   

    好废啊...这是当然啊...
    你给name赋值null,输出当然是null...
    而你给Session["name"]赋值了一个空对象,也就是说Session["name"]已经存在了,只是它指向的对象为空,当然输出为空字串了...这算什么bug...