Lunya's Note

学习成长笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

List<T>中Exists 和Contains的区别

Posted on 2014-08-14 16:18  calmrole  阅读(3110)  评论(0编辑  收藏  举报

.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封装方法的区别。