2009-03-13 4 views
1

私のプログラムには私のカスタムクラスでいっぱいのリスト<があります。私は単純に整数を指定し、その整数に設定された整数プロパティを持つすべてのオブジェクトを返すことで、リストからオブジェクトを抽出できるようにしたいと考えています。私はこのようにすることを考えていた:整数フィールドに基づいてList <>の項目を取得するにはどうすればよいですか?

int exampleint = 5; 
List<MyClass> extract = new List<MyClass>(); 
for(int i = 0; i < list.Length; i++) { 
    if(list[i].Number == exampleint) 
     extract.Add(list[i]); 
} 
return extract; 

これを行うにはどのような方法がありますか?ただ疑問に思う。

更新:Chris、あなたの答えはちょっとだった。この:

List<MyClass> extract = list.FindAll(new Predicate<MyClass>(delegate(MyClass obj) { return obj.Number == exampleint; })); 

あなたの最初の例は私にエラーを与えた:

List<MyClass> extract = list.FindAll(delegate(int obj) { return obj.Number == exampleint; }); 

は、実際には、このする必要があります。しかし、正しい方向に私を指摘してくれてありがとう、それは今働くようです。

+0

このプロジェクトでLinqを使用できますか? –

+0

うれしい私は助けることができます。それは私が1年以上問題なく提案した方法を使ってコンパイルしているので、奇妙です。ちょうどそれをVisual Studioで実行し、それは文句を言っていませんでした。さて、ReSharperは私にラムダに変換するよう訴えていますが、デリゲート版でうまくコンパイルします。 –

+0

私が自分で実現したエラーの1つは、「obj.Number」部分です。 Int32にはNumberという名前のメンバはありません。コンフィギュレータが私のコメントに対する応答でそれを指摘した。 – Bevin

答えて

7
List<MyClass> extract = list.FindAll(obj => obj.Number == exampleint); 

OR(あなたは.NET 2.0を使用しているとの表現を使用できない場合)

List<MyClass> extract = list.FindAll(delegate(MyClass obj) { return obj.Number == exampleint; }); 
+0

+!それは私のものよりもエレガントです:)私はいつもFindAllを忘れています。 –

+0

ありがとう!私は2.0を使用している、おそらくそれを言っている必要があります。 – Bevin

+0

objはMyClass – configurator

0

あなたがC#3を使用している場合は:

 
return (from e in list 
     where e.Number == exampleint 
     select e).ToList(); 

これは、リストに変換し、それらを引き出すLINQクエリを実行します。代わりにIEnumerableを返すことができれば、ToList()呼び出しを避けることができます。

0

利用のLINQ /拡張メソッド:

var result = list.Where(x => x.PropertyValue == YourSelectedValue); 
0

あなたが使用できる場合はLINQの:

一覧エキス= existingList.Where(X => x.Number == exampleInt).ToList();

1

あなたが唯一のC#2を持っている場合は、これを試してみてください。

public delegate bool Predicate<T>(T item); 

public static IEnumerable<T> Where(IEnumerable<T> source, Predicate pred) 
{ 
    foreach (T item in source) 
    { 
     if (pred(item)) 
      yield return item; 
    } 
} 

あなたはこのような種類のフィルタリング要件がある場合は、次のように再利用できます。

これはLinqソリューションと本質的に同じで、コンパイラのアップグレードが可能な場合に備えてこのスタイルのリスト処理を利用できるようにします。

関連する問題