今天在博客园阅读了一篇文章《为何.NET总是Bug不断??》,心为之一惊,以为又发现了什么新Bug,马上进去查看其内容,并且顺带看了所有的评论。
一个非常简单的程序
string action = "cancel";
if(action.Equals("cancel"))
...{
Console.WriteLine("true");
}
else
...{
Console.WriteLine("false");
}
>
置疑有两个:
- 在立即窗口中,无法使用action.Equals;
- 为什么答案不是true?
关于第1个问题,我做了一下实验,完全可以使用,因为action本身并非C#的关键字。我在输入时还会自动提示,但请注意,在使用立即窗口前,要确认的两件事情:
- 当前是使用的Debug模式,而非Release模式
- 在程序中设置了正确的断点,程序并且运行到该断点。
关于立即窗口的具体使用办法,请阅读MSDN Library当中的文字:
当代码处于中断模式时,“立即窗口”同断点所在的过程具有相同的范围。这样可以测试和更改变量的值。此外,还可用“立即窗口”调用过程并用不同的数据测试过程,但无需从头开始运行应用程序。
第二个问题,我的测试并没有出现错误,直接显示的是True,我比较关心的是评论栏中所发表的评论,有人写道:用Equals好像比较的是对象,虽然字符串是相同的,但如果是对象怎么会就是一个呢? 。然后有人在后面以导师的身份教导我们说:他说的是对的。如果你阅读了这篇文章,以后可能就会先入为主了,不会有人遇到此问题再去阅读权威资料了,那么是不是正确的呢?
请查看MSDN文档,因为action是一个String的对象,那么查看一下String.Equals方法的说明,里面很清楚的表明:String.Equals方法是用来确定两个 String 对象是否具有相同的值。
当然,有兴趣者或者刨根究底者可以去阅读这部分源代码,即SSCLI或者MONO的实现。
做为程序员,希望大家还是少一些浮躁。类似于热衷于国内某些媒体的头版头条,如《微软专家质疑.NET》,或者《微软反间谍软件逆子轼父删除IE》之类的愚人节新闻。把大部分精力浪费在这些毫无意义的争论上,对大家没有益处。只会越来越浮躁。
千万不要论坛文化带到博客园来。
文章来源:
http://blog.joycode.com/joy/archive/2005/03/31/46677.aspx