首页 > 代码库 > List<T>中Exists 和Contains的区别

List<T>中Exists 和Contains的区别

.net编码中,使用泛型List<>时,经常遇到这样的需求:新来一个Model对象,如果已有的List中没有这条数据,则把新对象Add到List中,否则不处理

判断已有的List中是否包含这个新的model,方法有几种,最直白的foreach遍历原有List并逐个判断

另外就是使用List自带的方法Exists 和Contains了

这两个方法有什么区别呢?通过MSDN描述和实际测试,很容易发现:

Contains方法,判断结果表示对象T的内存地址,是否在List中;

Exists方法,通过委托参数,可以指定判断对象某个值,是否与List中的某条记录的对应值相等;

显然针对开头提出的需求,用Exists方法更合适。

示例代码:

if(!MyList.Exists(t=>t.Id==MyModel.id)){MyList.Add(MyModel);}

PS:实现后的思考,采用.net提供的Exists 和Contains时,和使用foreach自己遍历后比较,在内部执行效率和性能上是否有本质区别呢?

个人觉得应该是一样的,只是自己实现与采用.net封装方法的区别。