是.NET Bug不断吗?

2005-03-31 by 开心就好

今天在博客园阅读了一篇文章《为何.NET总是Bug不断??》,心为之一惊,以为又发现了什么新Bug,马上进去查看其内容,并且顺带看了所有的评论。

一个非常简单的程序

    string action = "cancel";
    if(action.Equals("cancel"))
    ...{
    Console.WriteLine("true");

    }
    else
    ...{
    Console.WriteLine("false");
    } 

.

置疑有两个:

  1. 在立即窗口中,无法使用action.Equals;
  2. 为什么答案不是true?

关于第1个问题,我做了一下实验,完全可以使用,因为action本身并非C#的关键字。我在输入时还会自动提示,但请注意,在使用立即窗口前,要确认的两件事情:

  • 当前是使用的Debug模式,而非Release模式
  • 在程序中设置了正确的断点,程序并且运行到该断点。

关于立即窗口的具体使用办法,请阅读MSDN Library当中的文字:

<font color="#000000">当代码处于中断模式时,“<font>立即窗口</font>”同断点所在的过程具有相同的范围。这样可以测试和更改变量的值。此外,还可用“<font>立即窗口</font>”调用过程并用不同的数据测试过程,但无需从头开始运行应用程序。</font>

第二个问题,我的测试并没有出现错误,直接显示的是True,我比较关心的是评论栏中所发表的评论,有人写道:用Equals好像比较的是对象,虽然字符串是相同的,但如果是对象怎么会就是一个呢? 。然后有人在后面以导师的身份教导我们说:他说的是对的。如果你阅读了这篇文章,以后可能就会先入为主了,不会有人遇到此问题再去阅读权威资料了,那么是不是正确的呢?

请查看MSDN文档,因为action是一个String的对象,那么查看一下String.Equals方法的说明,里面很清楚的表明:String.Equals方法是用来确定两个 String 对象是否具有相同的值

当然,有兴趣者或者刨根究底者可以去阅读这部分源代码,即SSCLI或者MONO的实现。

做为程序员,希望大家还是少一些浮躁。类似于热衷于国内某些媒体的头版头条,如《微软专家质疑.NET》,或者《微软反间谍软件逆子轼父删除IE》之类的愚人节新闻。把大部分精力浪费在这些毫无意义的争论上,对大家没有益处。只会越来越浮躁。

千万不要论坛文化带到博客园来

 

Comments