0

次の構造を含むリストがあります。

class CompareDesignGroup
{
    string FieldId;
    string Caption;
}

リストには、上記の構造のアイテムが含まれています。

FieldIdがわかっている場合、リストの要素を取得することは可能ですか?

4

6 に答える 6

6

ジェネリック リスト クラスでFind メソッドを使用できます。find メソッドは、単一のアイテムのリストをフィルタリング/検索できる述語を取ります。

List<CompareDesignGroup> list = // ..;
CompareDesignGroup item = list.Find(c => c.FieldId == "SomeFieldId");

itemリストに一致する項目がない場合は null になります。

複数の項目を検索する必要がある場合は、FindAll メソッドを使用できます。

List<CompareDesignGroup> list = // ..;
List<CompareDesignGroup> result= list.FindAll(c => c.FieldId == "SomeFieldId");
于 2012-05-15T08:52:05.347 に答える
2

はい。LINQまたはの組み込み機能を使用しListます。

于 2012-05-15T08:52:17.853 に答える
2

LINQは次のように使用できます。

CompareDesignGroup result = yourList.FirstOrDefault(x => x.FieldId == yourKnownId);

FirstOrDefaultこの方法を使用する場合、リストに既知のIDのレコードが含まれていない場合にresultなります。nullしたがって、使用する前にresult、そうでないかどうかを確認してくださいnull

于 2012-05-15T08:52:47.027 に答える
2

を使用Whereしてから使用できますFirstOrDefault。それがLINQ式です。

var ls = new List<CompareDesignGroup>();
var result = ls.Where(a => a.FieldId=="123").FirstOrDefault();

またはSingleOrDefault、欲しいアイテムを手に入れるために。このような:

var ls = new List<CompareDesignGroup>();
var result = ls.Where(a => a.FieldId=="123").SingleOrDefault()

またはさらに簡単です:

var result = ls.SingleOrDefault(a => a.FieldId=="123");
var result2 = ls.FirstOrDefault(a => a.FieldId=="123");
于 2012-05-15T08:52:01.523 に答える
2

リスト内のアイテムを見つける方法はたくさんあります。

LINQは、独自の検索機能を提供しないコレクションを操作するのに役立つ拡張メソッドを提供します (または、コレクション自体がなく、のような汎用インターフェイスがある場合IEnumerable<T>)。オブジェクトがあり、List<CompareDesignGroup>そのオブジェクトで作業する場合は、そのクラスによって提供されるメソッドを使用できます (特殊化されたメソッドは、ほとんどの場合、LINQ メソッドよりも高速であり、コレクションの内部構造を認識しており、多くの抽象化レイヤーに依存する必要はありません)。

すべての例で、文化に不変で大文字と小文字を区別する比較をFieldId仮想idパラメーターに対して実行します。これは必要なものではない可能性があり、要件に応じて変更する必要がある場合があります。

使用するList<T>

次のように宣言されたリストがあるとします。

List<CompareDesignGroup>() list = new List<CompareDesignGroup>();

検索条件に一致する最初の要素を見つけるには (nullアイテムが見つからない場合は返されます):

CompareDesignGroup item = list.Find(
    x => String.Equals(x.FieldId, id,  StringComparison.InvariantCulture));

検索条件に一致するすべての要素を検索するには:

List<CompareDesignGroup> items = list.FindAll(
    x => String.Equals(x.FieldId, id,  StringComparison.InvariantCulture));

IEnumerable<T>(または、たとえばIList<T>)

次のように宣言されたリストがあるとします。

IEnumerable<CompareDesignGroup> list = ...

検索条件に一致する最初の要素を見つけるには (nullアイテムが見つからない場合):

CompareDesignGroup item = list.FirstOrDefault(
    x => String.Equals(x.FieldId, id,  StringComparison.InvariantCulture));

検索条件に一致する最初の要素を見つける(または、アイテムが見つからない場合は例外をスローする) には:

CompareDesignGroup item = list.First(
    x => String.Equals(x.FieldId, id,  StringComparison.InvariantCulture));

検索条件に一致するすべての要素を検索するには:

IEnumerable<CompareDesignGroup> item = list.Where(
    x => String.Equals(x.FieldId, id,  StringComparison.InvariantCulture));

多くの LINQ 拡張メソッドがあります。それらすべてを調べて、ニーズにより適したものを見つけることをお勧めします。

于 2012-05-15T09:24:19.907 に答える
1
List<CompareDesignGroup> listData = new List<CompareDesignGroup>(); // init the data
var result = listData.Where(x=> String.Equals(x.FieldID,"FIELDID KNOWN VALUE"); // gets all data
var first = listData.FirstOrDefault(x=> String.Equals(x.FieldID,"FIELDID KNOWN VALUE"); // gets first search result
于 2012-05-15T08:52:48.903 に答える