Sth. About ArrayList.Contains(object) in C#
今天写代码的时候发现ArrayList的Contains不是单纯的对内容进行匹配,比方说下面的代码:
namespace Test { class Program { static void Main() { ArrayList alStr=new ArrayList(); string[] strTemp=new string[2]; strTemp[0] = "1"; strTemp[1] = "2"; alStr.Add(strTemp); string[] strTemp1 = new string[2]; strTemp1[0] = "1"; strTemp1[1] = "2"; Console.WriteLine(alStr.Contains(strTemp)); Console.WriteLine(alStr.Contains(strTemp1)); Console.ReadLine(); } } }
结果为
True
False
第二个虽然字符串数组的内容也是”1″和”2″,但是匹配出来是False。
Push








你这不能评论?
还是不支持 FireFox
怎么一评论出来的都是乱码
唉,枉我写了那么多
算了,重写一遍,这个验证码插件太搞笑了,用中文提示验证码输入错误,连 HTML 头都不输出,,哪儿能显示正确?还不保存表单内容,只要验证码错误就得重新输入评论,这太不 user friendly 了。
简单来说:
ArrayList.Contains determines equality by calling Object.Equals.
However, The default implementation of Object.Equals supports reference equality only.
我觉得这就是上述问题的原因。
希望这次验证码别再错了
因为Contains(obj)方法是调用obj.equals(obj)来比较是不是存在这个对象,string[] 的equals只是简单的比较两对象是不是同一个引用,所以即使里面的内容一样但不是同一个引用,obj.equals(obj)返回的也是false.
嗯啊,问题原因知道的,只是贴出来分享一下而已
虽然是个很小的东东,不过对于理解类型方面问题还是有点帮助的