C#中List.Contains方法的结果判断及与Equals方法的关联解析
问题解答
代码示例
int item1=5; int item2=6; int item3=7; int item4=5; List<int> items= new List<int> {item1,item2,item3}; bool result= items.Contains(item4);
选项
a) false,因为列表中不存在变量"item4"
b) true,因为item4的值为5,该值存在于列表元素的值中
正确答案:b) true
原因
List<T>.Contains的核心逻辑是检查值是否存在于列表中,而非检查变量本身是否被加入列表。item4的值是5,列表里的item1值同样是5,二者值相等,因此Contains会返回true。
Contains方法与Equals方法的关联
List<T>.Contains内部会遍历列表中的每个元素,对每个元素调用其类型的Equals方法,和传入的参数做比较:
- 对于int这类值类型,默认的
Equals方法是比较值是否相等,只要两个值一致就返回true。 - 如果是引用类型,默认
Equals会比较对象的引用地址,但如果类型重写了Equals(比如string),就会按重写后的逻辑比较(比如string的Equals是比对字符内容)。
这个例子里,int是值类型,item4的5和列表中item1的5通过int.Equals比较会返回true,所以Contains最终返回true。
内容的提问来源于stack exchange,提问作者Deva Raja
相关产品推荐
相关产品推荐

