2009-06-13 124 views
2

我敢肯定,我在这里错过了一些简单的东西,但是在Visual Studio 2008中,我当前的项目只有List.Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会为我节省很多的痛苦。对此有任何快速的想法?谢谢。List <T> .Contains not displayed overload

*编辑: 使用System.Linq不适用于我。是否有可能我的项目被困在.net 2.0或者这些行中?无论如何检查&修复?

回答

8

确保引用System.Linq并将其包含在System.Linq中(使用System.Linq)到命名空间中。

您所指的第二个调用实际上是System.Linq中的Enumerable.Contains


编辑回应评论:

你可以做你自己的版本:

public void ContainedInList(IEnumerable<T> list, T value, IEqualityComparer<T> comparer) 
{ 
    foreach(T element in list) 
    { 
     if (comparer.Equals(element, value)) 
      return true; 
    } 
    return false; 
} 
+0

谢谢你的回复。这个选项不适用于我。 – Alex 2009-06-13 01:19:47

1

确保项目的目标框架(在项目属性对话框中使用)设置为.NET 3.5。

1

即使您被困在.NET 2.0中,您仍然可以定义扩展方法,前提是您使用的是C#3编译器(即Visual Studio 2008)。

按照this post from Daniel Moth,你只需要在代码中某处定义一个“ExtensionAttribute”类:

namespace System.Runtime.CompilerServices 
{ 
    public class ExtensionAttribute : Attribute 
    { 
    } 
} 

现在定义新的“包含”方法:

public static class MyExtensions 
{ 
    public static Contains<T>(this IEnumerable<T> list, 
     T item, IEqualityComparer<T> comparer) 
    { 
     foreach (var i in list) if (comparer.Equals(item, i)) return true; 
     return false; 
    } 
} 
3

要检查如果您的目标框架为2.0,请转至项目>属性,在应用程序选项卡上,您将看到“目标框架”

将其设置为.NET Framework 3.5

如果设置了,System.Linq应该对您可用。