私は、実行時に渡す値の使用に基づいて、リスト上で「検索」を実行する方法を試すことができません。下のコードが表示されている場合は、そのパスのパラメータがXであるList内のCustomClassを検索できるようにしたいと考えています(Xは実行時に定義されます)。C#List.Findメソッド - どのようにして述語に値を渡すことができますか?
リストにそのような検索を行う方法はありますか?または、イテレータを作成せずに手動で検索を行うことはできませんか?どのような場合には、代わりにキーを使用するコレクションがありますか?
private List<CustomClass> files;
public void someMethod()
{
Uri u= new Uri(www.test.com);
CustomClass cc = this.files.find(matchesUri(u)); // WON'T LET ME DO THIS
}
private static bool matchesUri(List<CustomClass> cc, Uri _u)
{
return cc.Path == _u; }
public class CustomClass
{
private Uri path;
public Uri Path
{
get { return this.path; }
set { this.path = value; }
}
}
PS。私は、私は非常にあなたは何の要素が述語に一致する見つからなかった場合、検索()メソッドはnullを返します
CustomClass cc = this.files.Find(p=> p.Path == u);
を書くことができますhttp://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx
ドコのメソッドの構文を調べるだけで、私はもっと上手くいけばいいのですか?パラメータ: 種類:System .. ::。Predicate <(Of <(T>)>)、 The述語<(Of <(T>)>)委任先。検索する要素の条件を定義します。 – Greg
パラメータの種類によって、デリゲートをメソッドに渡すことができます。したがって、そのデリゲートを作成するために使用するメソッドまたはラムダのシグネチャです。他のデリゲート型よりもラムダの使用を意味するものではありません。 lambdaのドキュメントは次のとおりです。http://msdn.microsoft.com/en-us/library/bb397687.aspx –
代理人は、関数ポインタに似ています。署名( 'delegate bool Predicate(T obj)')を見ると、述語はT **型の**単一パラメータをとり、** bool **を返す関数(メソッド)であることがわかります。 –
Groo