List <t>。包含不显示重载</t>

时间:2009-06-13 01:12:02

标签: c# linq generics

我确信我在这里遗漏了一些简单的东西,但在我当前项目的Visual Studio 2008中只有List.Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会给我带来很多悲伤。有什么快速的想法吗?谢谢。

*编辑: 使用System.Linq不适用于我。我的项目是否可能陷入.net 2.0或其他类似的东西?无论如何要检查&amp;修复?

4 个答案:

答案 0 :(得分:8)

确保引用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;
}

答案 1 :(得分:3)

要查看目标框架是否为2.0,请转到项目&gt;属性,在应用程序标签上,您会看到“目标框架”

将其设置为 .NET Framework 3.5

如果已设置,则System.Linq应该可用。

答案 2 :(得分:1)

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

答案 3 :(得分: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;
    }
}