Home > IT > Sth. About ArrayList.Contains(object) in C#

Sth. About ArrayList.Contains(object) in C#

分享家:Addthis中国

今天写代码的时候发现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。

You don't feel like leaving comments? Please leave your palm-print.
懒得留言?那留下您的掌印吧。
Categories: IT Tags:
  1. July 7th, 2008 at 10:24 | #1

    你这不能评论?
    还是不支持 FireFox
    怎么一评论出来的都是乱码
    唉,枉我写了那么多

  2. July 7th, 2008 at 10:30 | #2

    算了,重写一遍,这个验证码插件太搞笑了,用中文提示验证码输入错误,连 HTML 头都不输出,,哪儿能显示正确?还不保存表单内容,只要验证码错误就得重新输入评论,这太不 user friendly 了。
    简单来说:
    ArrayList.Contains determines equality by calling Object.Equals.
    However, The default implementation of Object.Equals supports reference equality only.
    我觉得这就是上述问题的原因。

    希望这次验证码别再错了

  3. July 7th, 2008 at 10:34 | #3

    因为Contains(obj)方法是调用obj.equals(obj)来比较是不是存在这个对象,string[] 的equals只是简单的比较两对象是不是同一个引用,所以即使里面的内容一样但不是同一个引用,obj.equals(obj)返回的也是false.

  4. July 7th, 2008 at 21:03 | #4

    嗯啊,问题原因知道的,只是贴出来分享一下而已
    虽然是个很小的东东,不过对于理解类型方面问题还是有点帮助的

  1. No trackbacks yet.

:D 8) :down: 8O :!: :halo: :evil: :heart: :kiss: :lol: :money: :mrgreen: :x :| :pirate: :?: :oops: :roll: :P :( :) :o :up: :vangry: :twisted: ;) :? :cry:

也许您会觉得ReCAPTCHA验证码很繁琐,会认为他和其他所有的验证码一样让你厌烦。那请点击这里,您会了解到ReCAPTCHA为人类文化的传承做出了多大的贡献。请您也为人类知识的保存和传递也出一份力吧,谢谢!
 
    Posts Nav.