操作系统:winxp sp2
语言环境:VS。NET2003
语言:C#。ASP。NET在HTML中写入一个DrowDownList控件ID 为“list"和一个“submit"(<input type="submit" value="提交">),还有一个ASP。NET服务器控件Label ID为Label1,在Page_Load中写入如下代码:
if(Request.Form["list"]!="")
{
Label1.Text="all rights" + Request.Form["list"];
Debug.WriteLine(Request.From["list"])
}运行的结果为:label1="all right";这就有问题了。按道理来讲第一次结果应该为label1="",
大家请注意if(...)中的语句。如果说第一次执行的时候来自于"list"中的值不为空才执行IF块中的语句,但是为什么块中的语句却又正常执行,难道Reuqest.Form["list"]在第一次启动的时候不为空???但是用DEUBG输出“LIST”的值又为空呢?这不是悖论吗?后来将上面的代码只改动IF语句:
if(Request.Form["list"]!=null)  //注意用null替代"",一切正常。难道是""在C#中不代表空。或是C#的编译器有问题?

解决方案 »

  1.   

    ""  是空字符串,比如用来初始化 string str ="";
    null  是object,没值,比如一个函数 DataRow Select(string name){} 的作用是寻找Primarykey 的值为 name 的datarow  ,那么就可以很方便的用 if (fun==null)来判定寻找的结果:返回 null表示没找到,否则返回一个 DataRow.
      

  2.   

    up,请大家看清楚我的问题。那么“”在C#中代表什么,第一次为什么可以运行?Label1.Text="all rights"
      

  3.   

    注意 null 和 "" 是不等的~~~ 
      

  4.   

    null表示空引用,""表示空字符串,不是编译器有问题,是你的观点错误。当然,能在实践中发现自己这个知识上的误区,说明你还是很擅于思考。
      

  5.   

    嗯,可以怀疑,但是下结论之前最好先拿出足够的证据
    比如你可以把标题改为:C#的编译器有bug?一起讨论一下
    这样
      

  6.   

    哥们
    空串和 , null 当然不同了。
    null 是什么都不是,连类型都没有确定的东西
    "" 已经是字符串但是 0 长度的字符串。
    object o1 = null;
    object o2 = "";if (o1 is string)
    {
       //这个不会运行
       Debug.WriteLine("O2 Is String");
    }if (o2 is string)
    {
       //这个可以运行
       Debug.WriteLine("O2 Is String");
    }
      

  7.   

    这个那里是 bug
    大多语言都是这个样的。