我敢肯定,我在這裏錯過了一些簡單的東西,但是在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