2009-06-13 5 views
2

ここでは単純なものがありませんが、現在のプロジェクトではVisual Studio 2008ではList.Contains(T)のみが存在します。 List.Contains(T、IEqualityComparer(T))を使うことができれば、多くの悲しみを節約できます。これに関する簡単な考え方は?ありがとう。リスト<T>。オーバーロードが表示されないもの

*編集: using System.Linqは利用できません。私のプロジェクトが.net 2.0やそれに沿った何かに詰まっている可能性はありますか?とにかく&を確認するには?

答えて

8

System.Linqを参照し、名前空間にSystem.Linqを使用していることを確認してください。

2番目の呼び出しは、実際には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

+0

申し訳ありません - その方法がどこから来ているのですか。リストを取り、そのチェックを行う独自のメソッドを記述することもできますが、それはかなり簡単です。私は3.5の代わりに.NET 2.0をターゲットにしていると仮定しています。 –

+0

私はあなたに別のオプションを与えるように編集しました。 –

1

(プロジェクトのプロパティ]ダイアログボックスで利用可能)プロジェクトのターゲットフレームワークを.NETに設定されていることを確認3.5。

1

.NET 2.0で動かなくても、C#3コンパイラ(Visual Studio 2008)を使用している場合は、拡張メソッドを定義できます。

this post from Daniel Moth 1として

、あなただけのどこかにあなたのコード内で「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が利用可能になります。

関連する問題