我敢肯定,我在这里错过了一些简单的东西,但是在Visual Studio 2008中,我当前的项目只有List.Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会为我节省很多的痛苦。对此有任何快速的想法?谢谢。List <T> .Contains not displayed overload
*编辑: 使用System.Linq不适用于我。是否有可能我的项目被困在.net 2.0或者这些行中?无论如何检查&修复?
我敢肯定,我在这里错过了一些简单的东西,但是在Visual Studio 2008中,我当前的项目只有List.Contains(T)存在。能够使用List.Contains(T,IEqualityComparer(T))会为我节省很多的痛苦。对此有任何快速的想法?谢谢。List <T> .Contains not displayed overload
*编辑: 使用System.Linq不适用于我。是否有可能我的项目被困在.net 2.0或者这些行中?无论如何检查&修复?
确保引用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;
}
确保项目的目标框架(在项目属性对话框中使用)设置为.NET 3.5。
即使您被困在.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;
}
}
要检查如果您的目标框架为2.0,请转至项目>属性,在应用程序选项卡上,您将看到“目标框架”
将其设置为.NET Framework 3.5。
如果设置了,System.Linq
应该对您可用。
谢谢你的回复。这个选项不适用于我。 – Alex 2009-06-13 01:19:47