2009-06-13 122 views
2

我敢肯定,我在這裏錯過了一些簡單的東西,但是在Visual Studio 2008中,我當前的項目只有List.Contains(T)存在。能夠使用List.Contains(T,IEqualityComparer(T))會爲我節省很多的痛苦。對此有任何快速的想法?謝謝。List <T> .Contains not displayed overload

*編輯: 使用System.Linq不適用於我。是否有可能我的項目被困在.net 2.0或者這些行中?無論如何檢查&修復?

回答

8

確保引用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; 
} 
+0

謝謝你的回覆。這個選項不適用於我。 – Alex 2009-06-13 01:19:47

1

確保項目的目標框架(在項目屬性對話框中使用)設置爲.NET 3.5。

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; 
    } 
} 
3

要檢查如果您的目標框架爲2.0,請轉至項目>屬性,在應用程序選項卡上,您將看到「目標框架」

將其設置爲.NET Framework 3.5

如果設置了,System.Linq應該對您可用。