C# 列表<;T>;。包含未显示过载的内容

C# 列表<;T>;。包含未显示过载的内容,c#,linq,generics,C#,Linq,Generics,我确信我在这里遗漏了一些简单的东西,但在VisualStudio2008中,在我当前的项目列表中,只有Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会让我省去很多悲伤。有什么想法吗?谢谢 *编辑: 我无法使用System.Linq。我的项目是否可能被困在.NET2.0或类似的版本中?是否仍要检查和修复?请确保引用System.Linq并将其(使用System.Linq)包含在您的命名空间中 您所指的第二个调用实际上在System.L

我确信我在这里遗漏了一些简单的东西,但在VisualStudio2008中,在我当前的项目列表中,只有Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会让我省去很多悲伤。有什么想法吗?谢谢

*编辑:
我无法使用System.Linq。我的项目是否可能被困在.NET2.0或类似的版本中?是否仍要检查和修复?

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

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


根据评论进行编辑:

您可以制作自己的版本:

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;
}
public void containedList(IEnumerable列表、T值、IEqualityComparer比较器)
{
foreach(列表中的T元素)
{
if(比较器等于(元素、值))
返回true;
}
返回false;
}

确保将项目的目标框架(在“项目属性”对话框中提供)设置为.NET 3.5。

即使您被困在.NET 2.0中,只要您使用C#3编译器(即在Visual Studio 2008中),也可以定义扩展方法

根据,您只需要在代码中的某个地方定义一个“ExtensionAttribute”类:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute 
    {
    }
}
现在定义新的“Contains”方法:

公共静态类MyExtensions
{
公共静态包含(此IEnumerable列表,
T项,IEqualityComparer(比较器)
{
如果(comparer.Equals(item,i))返回true,则foreach(列表中的var i)返回true;
返回false;
}
}

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

将其设置为.NET Framework 3.5


如果设置了此选项,
System.Linq
应可供您使用。

谢谢您的回复。此选项对我不可用。抱歉-这就是该方法的来源。不过,您可以编写自己的contains方法,它接受一个列表并进行检查——这相当容易。我假设您的目标是.NET 2.0,而不是3.5。再次感谢您的帮助。在我怀疑我的项目使用的.NET版本有问题后,我在谷歌上搜索了一下。它指向了.NET 2.0,在将其更改为.NET 3.5并添加了using System.linq之后,我的问题得到了解决:)似乎有点奇怪,你会接受一个实际上没有解决你问题的答案,而其他两个答案却回答了。
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;
    }
}