Expression<br>>とFunc

5460 ワード

1.Expressionは式です
//  LambdaExpression      
            Expression<Func<int, int, int, int>> expr = (x, y, z) => (x + y) / z;
            Console.WriteLine(expr.Compile()(1, 2, 3));

https://msdn.microsoft.com/zh-cn/library/system.linq.expressions.expression(v=vs.100).aspx
https://msdn.microsoft.com/zh-cn/library/bb335710(v=vs.100).aspx
 
2.Func依頼
パラメータを1つ持ってTResultパラメータで指定したタイプ値を返す方法をカプセル化します.public delegate TResult Func(T arg)タイプパラメータin Tこのパッケージングを依頼する方法のパラメータタイプ.このタイプのパラメータは逆です.すなわち、指定したタイプまたは派生度の低いタイプを使用できます.コヒーレントおよびインバータの詳細については、汎用のコヒーレントおよびインバータを参照してください.out TResultこのパッケージングを依頼するメソッドの戻り値タイプ.このタイプのパラメータはコヒーレントです.すなわち、指定したタイプまたは派生度の高いタイプを使用できます.コヒーレントおよびインバータの詳細については、汎用のコヒーレントおよびインバータを参照してください.パラメータargタイプ:Tこのパッケージングを依頼するメソッドのパラメータ.戻り値タイプ:TResultこのパッケージングを依頼するメソッドの戻り値.
  string mid = ",middle part,";
            ///    
            Func<string, string> anonDel = delegate(string param)
            {
                param += mid;
                param += " And this was added to the string.";
                return param;
            };
            ///λ     
            Func<string, string> lambda = param =>
                {
                    param += mid;
                    param += " And this was added to the string.";
                    return param;
                };
            ///λ     (  )
            Func<int, int> lambdaint = paramint =>
                {
                    paramint = 5;
                    return paramint;
                };
            ///λ            
            Func<int, int, int> twoParams = (x, y) =>
                {
                  return  x*y;
                };
            MessageBox.Show(""+anonDel("Start of string"));
            MessageBox.Show("λ     :" + lambda("Lambda expression"));
            MessageBox.Show("λ     (  ):" + lambdaint(4).ToString());
            MessageBox.Show("λ         :" + twoParams(10, 20).ToString());

 
ソース:
http://blog.csdn.net/shuyizhi/article/details/6598013