zoukankan      html  css  js  c++  java
  • C# 以函数Action/Func/Task作为方法参数

    以Action、Func、Task作为方法参数,mark一下

    以Action为参数

     1     public void TestAction()
     2     {
     3         //Action参数
     4         ExecuteFunction(() =>
     5         {
     6 
     7         });
     8         ExecuteFunction(ActionAAA("para"));
     9         ExecuteFunction(AAA);
    10 
    11         //Action<T>参数,T可以由类的泛型参数输入
    12         ExecuteFunction<string>((string praa) =>
    13         {
    14 
    15         });
    16         //Action<T>参数,T主动输入
    17         ExecuteFunction<string>((string praa) =>
    18         {
    19 
    20         }, "aaa");
    21         ExecuteFunction<string>(AAA, "para");
    22     }
    23 
    24     private void ExecuteFunction(Action action)
    25     {
    26         action?.Invoke();
    27     }
    28 
    29     private void ExecuteFunction<T>(Action<T> action)
    30     {
    31         return;
    32     }
    33     private void ExecuteFunction<T>(Action<T> action, T s)
    34     {
    35         action?.Invoke(s);
    36     }

    引用的方法

     1     void AAA()
     2     {
     3     }
     4     void AAA(string para)
     5     {
     6     }
     7     Action ActionAAA(string para)
     8     {
     9         return () =>
    10         {
    11             Console.WriteLine(para);
    12         };
    13     }
    View Code

    以Func为参数 

     1     public async void TestFunc()
     2     {
     3         //Func<string>
     4         ExecuteFunction(() =>
     5         {
     6             return string.Empty;
     7         });
     8         //Func<Task>
     9         ExecuteFunction(async () => { });
    10         ExecuteFunction(FuncTask);
    11         //Func<T, Tout>
    12         ExecuteFunction<string, int>(BBB, "para");
    13         //Func<T, Task>
    14         ExecuteFunction<string>(FuncTask, "para");
    15         //Func<T, Task<Tout>>
    16         var stringResult = await ExecuteFunction<string, string>(FuncWithResult<string, string>, "para");
    17     }
    18 
    19     private string ExecuteFunction(Func<string> func)
    20     {
    21         return func.Invoke();
    22     }
    23 
    24     private void ExecuteFunction(Func<Task> func)
    25     {
    26         func?.Invoke();
    27     }
    28     private Tout ExecuteFunction<T, Tout>(Func<T, Tout> func, T para)
    29     {
    30         return func.Invoke(para);
    31     }
    32 
    33     private void ExecuteFunction<T>(Func<T, Task> function, T para)
    34     {
    35         function?.Invoke(para);
    36     }
    37     private async Task<Tout> ExecuteFunction<T, Tout>(Func<T, Task<Tout>> function, T para)
    38     {
    39         return await function?.Invoke(para);
    40     }
     1     private int BBB(string obj)
     2     {
     3         return 1;
     4     }
     5     private async Task<Tout> FuncWithResult<T, Tout>(T para)
     6     {
     7         await Task.Delay(2);
     8         return default(Tout);
     9     }
    10 
    11     async Task FuncTask<T>(T para)
    12     {
    13 
    14     }
    15     async Task FuncTask()
    16     {
    17 
    18     }
    View Code

    其中,

        ExecuteFunction(async () =>
        {
        });
    输入async () =>{}后,Func<Task> func、Action action都是可以匹配的,优先使用的是Func<Task> func
     

    以Task为参数

     1     private void TestTask()
     2     {
     3         ExecuteFunction(Task.Run(() =>
     4         {
     5 
     6         }));
     7         ExecuteFunction(Task<string>.Run(async () =>
     8         {
     9             return string.Empty;
    10         }));
    11     }
    12 
    13     private void ExecuteFunction(Task task)
    14     {
    15         task.Start();
    16     }
    17     private void ExecuteFunction<Tout>(Task<Tout> task)
    18     {
    19         task.Start();
    20     }
  • 相关阅读:
    将数组格式的字符串转换成数组
    引号嵌套引起的问题
    如何使用for循环把对象push到数组中,且前面的值不会被覆盖
    如何把一个大的对象,转成若干个小对象,然后在放到数组中
    前端如何设置一天只能点击一次的以及如何去判断第二天0点刷新的一些问题
    let和const的理解以及let,const,var的区别
    watch监控和computed监控
    媒体查询
    react中redux+react-redux插件的应用
    react中控制div的位置移动动画
  • 原文地址:https://www.cnblogs.com/kybs0/p/10766329.html
Copyright © 2011-2022 走看看