0
点赞
收藏
分享

微信扫一扫

.Net C# Func Action Predicate 预定义委托

NicoalsNC 2022-02-07 阅读 80

开发中使用委托可以很方便的完成解耦和扩展,但是每次都需要手动创建新的委托感觉还是有些麻烦,这时我们可以考虑C#中的预定义委托类型。

Func<>:最多支持16个泛型参数,约定最后一个类型为返回值类型。

Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,TResult>

//2个参数,一个返回值
Func<int, int, int> int1 = GetInt;
//1个参数,一个返回值
Func<int, int> int2 = GetInt1;

//匿名函数(lambda)计算
Func<int, int, string> str1 = (a, b) => (a * b).ToString();
Func<string, int, string> str2 = (a, b) =>
{
    string result = (int.Parse(a) / b).ToString();
    return result;
};

Action<>:最多支持16个泛型参数,无返回值。

Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>

//2个参数,无返回值
Action<int, int> int3 = PrintInt;

Action printstr = () =>
{
    Console.WriteLine(str1(3, 4));
    Console.WriteLine(str2(str1(3, 4), 4));
};

Predicate<>:只支持一个泛型参数,固定返回bool类型。

Predicate<T>

//判断单个参数是否满足条件
Predicate<int> predicate = a => a > int1(1, 2);

以上3种预定义委托类型足以满足大部分应用场景,省掉了自己创建委托的时间。

参考代码:

class FuncAndActionDemo
    {
        public static void DemoMain()
        {
            //2个参数,一个返回值
            Func<int, int, int> int1 = GetInt;
            //1个参数,一个返回值
            Func<int, int> int2 = GetInt1;
            //2个参数,无返回值
            Action<int, int> int3 = PrintInt;
            //输出结果
            int3(int1(1, 2), int2(3));
            //匿名函数(lambda)计算
            Func<int, int, string> str1 = (a, b) => (a * b).ToString();
            Func<string, int, string> str2 = (a, b) =>
                {
                    string result = (int.Parse(a) / b).ToString();
                    return result;
                };
            //判断单个参数是否满足条件
            Predicate<int> predicate = a => a > int1(1, 2);
            Action printstr = () =>
            {
                Console.WriteLine(str1(3, 4));
                Console.WriteLine(str2(str1(3, 4), 4));
            };
            //执行输出命令
            printstr();
        }
        /// <summary>
        /// 两数相加
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int GetInt(int a, int b)
        {
            return a + b;
        }
        /// <summary>
        /// 参数乘2
        /// </summary>
        /// <param name="a"></param>
        /// <returns></returns>
        static int GetInt1(int a)
        {
            return a * 2;
        }
        /// <summary>
        /// 输出两数相乘结果
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        static void PrintInt(int a, int b)
        {
            Console.WriteLine(a * b);
        }

    }

输出结果:

 

举报

相关推荐

0 条评论