包含和包含<>之间的差异在c#中

时间:2016-01-21 10:51:25

标签: c# linq

我可能很愚蠢,但VS耳语帮助中containscontains<>之间有什么区别?有时我得到两者,有时只有&lt;&gt;。

他们的事情就是我试图在SO中使用包含在某些解决方案中的地方,但它会抛出错误,我最好的重载方法有一些无效的参数(它们的方法是System.Linq.ParallelEnumerable.Contains<TSource>(...))。

我的代码是这样的:

defaultDL = db.SomeEntity
                    .Where(dl => dl.Something == this.Something
                        && (dl.AllLocation == true || this.SomeOtherEntity.Select(loc => loc.Location).Contains(dl.Location)))
                    .ToList();

4 个答案:

答案 0 :(得分:4)

如果您导航到System.Linq.Enumerable.Contains方法的定义,您将看到它被声明为通用扩展方法。

public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value);

有时用<type>参数调用它,有时不调用它的原因是因为大多数时候编译器会分析它的参数并自动确定类型。因此,它将被重写为显式通用调用。

someCollection.Contains(someValue);

实际上正在编译为

Enumerable.Contains<CollectionInnerType>(someCollection, someValue);

答案 1 :(得分:1)

Linq有扩展方法Contains<>。当您使用它时 - 您可以输入类型参数。如果你不是enter - c#编译器将尝试隐式指定参数。

其他一些可枚举的类(例如List<>)实现了自己的Contain方法。

因此,当IntelliSense建议Contains<>方法时 - 它是Linq的一个实现;当Contains时 - 它是具体类的自己实现。

关于实施的差异。自己的类实现似乎比Linq实现更快,因为Linq实现从端点类更抽象。

答案 2 :(得分:0)

有很多种可能性。但这里最常见。

我猜SomeOtherEntity是对ICollection<T>的引用。这是ICollection上的标准方法,它在内存中扫描参考相等性(取决于实现)。 You can read about that here

还有来自LINQ的Contains<T>。这是一种扩展方法。它适用于IEnumerable<T> ICollection<T>派生的IEnumerable<T>You can read about this one here.

答案 3 :(得分:0)

它有以下基本区别。

  1. 包含的是Extension方法,而Contains不是。
  2. 包含retrun IEnumerable<T>,而Contais返回bool值并确定您的商品是否存在。在Contain中,您可以传递基于条件的分组将返回MediaPlayer song; //then play it inside your onCreate song = MediaPlayer.create(this, R.raw.YOUR_SONG_NAME); song.start();