我确信我在这里遗漏了一些简单的东西,但在我当前项目的Visual Studio 2008中只有List.Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会给我带来很多悲伤。有什么快速的想法吗?谢谢。
*编辑: 使用System.Linq不适用于我。我的项目是否可能陷入.net 2.0或其他类似的东西?无论如何要检查&修复?
答案 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;
}
}