EDIT:私はbreak;
関連IDを持つ複数のタイプがあることができれば前に、あなたは以下のKeith's answerや私の2番目のコードサンプルあたりとしてFirstOrDefault
を使用する必要が気づいていませんでした。
EDIT:それはtype.Id
のタイプにかかわらず平等のために/ハッシュコードの動作を想定して、不必要に非効率的だとして、バージョン「マルチから」削除。
A・ジョインは、しかし、おそらく、より適切です:
var query = from s in vars
join type in statusList on s equals type.Id
select new NameValuePair(type.Id, type.Text);
foreach (var pair in query)
{
Add(pair);
}
あなたはあなただけのAddRange(query)
を呼び出すことができ、その時点でIEnumerable<NameValuePair>
を取るAddRange
方法を作りたいかもしれません。
また、ルックアップを使用することもできます。このバージョンでは、 "s"ごとに1つのタイプしか追加しないようにしています。
var lookup = types.ToLookup(type => type.Id);
foreach (var s in vars)
{
var types = lookup[s];
if (types != null)
{
var type = types.First(); // Guaranteed to be at least one entry
Add(new NameValuePair(type.Id, type.Text));
}
}
これは、基本的に辞書を構築するためにタイプのリストを調べるという利点があります。
ブレークは最初の一致を意味します。 'type.Id = s'の場合、解は内側の列挙可能なすべてのケースに一致します。 – leppie
それで "あれがあれば..."という文章:) –
同じ答えを投稿する前にスクロールダウンしてください:)今日のレッスン:もっと慎重に読んでください。 – leppie