2016-03-29 21 views
2

私はCommandクラスを作成しました。このクラスには2人の重要なメンバーがいます。C#ラムダ - 条件で選択

public class Command 
{ 
    public string Name { get; set; } 
    public CommandExecutedCallback Callback { get; set; } 
    public delegate void CommandExecutedCallback(Command command); 
} 

私はList<Command>でこのクラスの複数のオブジェクトを保存します。

別のクラス​​には、メンバー関数GetCallbacks(string name)があります。

名前が一致する条件でCommandExecutedCallback -delegatesの配列を取得するためにラムダ式を使用したいと考えています。

すべてのコールバックは、return commandList.Select(t => t.Callback).ToArray()で取得できます。

条件を挿入して、指定された名前のコマンドのみを取得するにはどうすればよいですか?

ありがとうございます。

+1

「選択」は投影用です。フィルタリングのために 'Where'を使います。 –

答えて

4

あなたはWhere条件を追加する必要があります:あなたは本当にする必要がない限り

return commandList.Where(t => t.Name == name).Select(t => t.Callback); 

あなたはまたToArrayを呼び出し避ける必要があります。このデータを配列が必要な他のメソッドに渡している場合を除き、ToArrayですべてのデータをコピーすることは、おそらく不必要な(しかも高価な)操作になります。

+0

これは私が探していたものです。どうもありがとうございます。 –

2

この意味は?

return commandList 
    .Where(t => t.Name == "someName") 
    .Select(t => t.Callback) 
    .ToArray(); 
+0

また、これは私が探していたものです。ありがとうございました:) –

0

SELECTを使用する必要はありません。あなたが選択したものは、あなたがリストから得たもの、そしてどこで表示するためにリストをフィルタリングするかを指示します。

return commandList.Where(t => t.Name == "VALUE").Select(t => t.Callback) 
+0

あなたは 'Select'を削除しましたが、これはまだ必要です。 –

+0

私はそれを変更しましたが、両者の違いを理解すればもっと重要だと思います。 –