2011-12-20 7 views
0
public List<String> listStr = new listStr(); 

public List<String> FindString(Expression<Func<String, bool>> predicate) 
{ 
// return a list that satisfies the predicate 
} 

私は、C#でExpressionを使用する方法を理解するための例を作成しようとしています。このコードを完成させるために手伝ってください。リストのすべての要素の式を評価します。

+0

[Expressionクラスのドキュメント](http://msdn.microsoft.com/en-us/library/system.linq.expressions.expression.aspx)の一番下に例があります: 'var result = Expression.Lambda >(blockExpr).Compile()(); ' –

答えて

4

これは何か?

public List<String> FindString(List<String> list, Func<String, bool> predicate) 
{ 
    return list.Where(predicate).ToList(); 
} 

なぜあなたは、あなたがそれを使用したい場合は、あなたが前にそれをコンパイルする必要があり?,表現を使うのですが、あなたがあなたの方法で表現のいくつかの操作をしたい場合を除き、私は上記を使用してお勧めします(または直接LINQの.Where()拡張メソッドを使用して)

public List<String> FindString(List<String> list, Expression<Func<String, bool>> predicate) 
{ 
    var lambda = predicate.Compile(); 
    return list.Where(lambda).ToList(); 
} 
1
public List<String> FindString(Expression<Func<String, bool>> predicate) 
{ 
    return listStr.Where(predicate.Compile()).ToList(); 
} 
+0

投稿したようにExpressionをコンパイルする必要があります。 –

+0

@SebastianPiuありがとうございました。 – Magnus

0
public List<String> listStr = new List<String>(); 

public List<String> FindString(Expression<Func<String, bool>> predicate) 
{ 
    // return a list that satisfies the predicate 
    Func<string, bool> p = predicate.Compile(); 
    return listStr.Where(p).ToList(); 
} 

PS:あなたの変数の宣言が間違っています。