Session["dxef"]="aa";
string strTmp=Session["dxef"];   //A
strTmp=Session["dxef"]+"";       //B
strTmp=Convert.ToString(Session["dxef"]); //C为什么A句会出错,而B、C可以通过?
A提示:无法将类型“object”隐式转换为“string”。存在一个显式转换(是否缺少强制转换?)
C可以理解,可为什么B可以隐式转换,而A不可以呢?

解决方案 »

  1.   

    在B中实际调用了
    public static string Concat(object, object);
      

  2.   


    兄台,这是因为:
    A  :     左值为string   右值为object   不能隐式转换
           应该这样写  string strTmp=Session["dxef"].ToString();B  :      如上面朋友所说,右边的加法使.net默认调用了ConCat字符串连接的方法,结果是返回一个字符串型,那么左边和右边就是同一个类型了,可以赋值。C  :     左值为String ,右值经过Convert.ToString()方法也转换成了String ,所以可以赋值。           回答完毕。
      

  3.   

    string strTmp=Session["dxef"];   //A
    这两个类型不一样的
    string strTmp=Session["dxef"].ToString();   //A
    这样吧
      

  4.   

    记住:.net支持隐式转换。
    再给你一个例子
    int ttint = 5;
    string abc = "1234" + ttint + "6789";
    上面正确,下面错误:
    string abc = ttint + "12346789";