2

このメソッドのパラメーターとしてLambda式を使用し、where句で使用するにはどうすればよいですか?

Func、dynamic、Expressionツリーについて読んでいますが、これを行う方法がわかりません。

問題は、タイプTがわからず、発信者が何を返したいのかわからないことです。C#4.0でこれを行うにはどうすればよいですか?私を始めるための例は素晴らしいでしょう-ありがとう。

これが私が欲しいものの非常に単純化された例です。

static public List<T> Match(string startfilelocation, ???)
{
    var filelist = Directory.GetFiles(startfilelocation, "*.*", SearchOption.AllDirectories);
    return filelist.Where(???);
}

ありがとうございました。

4

3 に答える 3

1
static public IEnumerable<string> Match(string startfilelocation,Func<string,bool> selector) 
{ 
    var filelist = Directory.GetFiles(startfilelocation, ".", SearchOption.AllDirectories); 
    return filelist.Where(selector);
}

また、すべてのファイル名をメモリにロードしないようDirectory.EnumerateFilesに使用する代わりに、お勧めしますGetFiles

于 2012-04-13T08:21:00.213 に答える
1

List<string>戻りタイプとして指定しFunc<string, bool>、パラメーターのタイプを使用しToListてから、結果をリストに変換するメソッドを使用します。

static public List<string> Match(string startfilelocation, Func<string, bool> filter) {
  var filelist = Directory.GetFiles(startfilelocation, "*.*", SearchOption.AllDirectories);
  return filelist.Where(filter).ToList();
}

例:

List<string> files = Match(folder, s => s.Contains("candy"));
于 2012-04-13T08:23:04.017 に答える
0

LINQのWhereメソッドは、2つのパラメーターFunc<TSource,bool>とを受け入れることができますFunc<TSource,int,bool>。あなたの場合fileliststring[]それ故にあなたは2つのオーバーロードされたメソッドを持つことができます

static public IEnumerable<string> Match(string startfilelocation, Func<string,bool> predicate)
{
    var filelist = Directory.GetFiles(startfilelocation, "*.*", SearchOption.AllDirectories);
    return filelist.Where(predicate);
}



static public IEnumerable<string> Match(string startfilelocation, Func<string,int,bool> predicate)
{
    var filelist = Directory.GetFiles(startfilelocation, "*.*", SearchOption.AllDirectories);
    return filelist.Where(predicate);
}
于 2012-04-13T08:22:14.330 に答える