C# Func委托与表达式树Expression的关联和区分

学习了匿名委托Func<T,TResult>后,对委托的了解更深入了点。

如果对委托不了解,我们先看委托的概念和定义:

Func<T, TResult> 委托

.NET Framework (current version)

封装一个方法,该方法具有一个参数,且返回由 TResult 参数指定的类型的值。

如需仔细了解请看官方文档:https://msdn.microsoft.com/zh-cn/library/bb549151(v=vs.110).aspx

我创建了个控制台demo,用于理解委托的使用

   /// <summary>
    /// 委托的使用方法
    /// </summary>
    class Delegate
    {
        delegate void TestDelegate(string s);

        public void Test()
        {
            //带有输出的隐式委托
            Func<string, string> func = s => s.ToUpper();
            string name = "Dakao";
            string name2 = "Dao";
            Console.WriteLine(func(name));

            //自定义委托返回方法
            Func<string, string> func2 = n =>
            {
                return $"{n}Wold".ToUpper();

            };
            Console.WriteLine(func2(name));

            Func<string, string, string> func3 = (x, s) => s.ToUpper();
            Console.WriteLine(func3(name, name2));

            //显式委托+lambda方法体
            TestDelegate del = n => {
                string s = n + " World2";
                Console.WriteLine(s);
            };
            del(name);
            //Console.WriteLine("Hello World!");
            Console.ReadLine();
        }
    }

有了上面的例子可以很好区分委托了,但是我在一个项目底层看到底层里面可以把委托作为表达式树的类型,然后用于表达SQL的where条件,我就有点纳闷了,下面再解释下表达式树Expression

表达式树在微软官方文档有仔细介绍:注意只能从lambdas生成

 

 

这意味着表达式树的概念,理解了这点我们就可以用一个demo理解使用关系了和区分了。

    /// <summary>
    ///表达式树
    /// 表达式树是把Lambda表达式存起来。在一些底层里面可以作为SQL的where条件使用。
    /// </summary>
    public class Expression
    {
        //基础委托
        Func<int, bool> func = num => num>5;
        //表达式树
        Expression<Func<int, bool>> lambda = num => num < 5;
        //定义表达式树list
        List<Expression<Func<int, bool>>> expressions = new List<Expression<Func<int, bool>>>();
        void Test()
        {
            //假设这里是拼接where条件的地方
            expressions.Add(lambda);
        }
    }

总结:表达式树并不是直接把委托作为类型,它仅仅是把lambda表达式记录下来,类似一个变量接收了值。

Expression<Func<int, bool>> lambda = num => num < 5;

个人观点,高手请指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值