C#委托/Func()中 GetlnvocationList()方法的使用 | 接受委托多个返回值

简介: C#委托/Func()中 GetlnvocationList()方法的使用 | 接受委托多个返回值

在日常使用委托时,有以下常用方法


方法名称 说明
 Clone   创建委托的浅表副本。
 GetInvocationList   按照调用顺序返回此多路广播委托的调用列表。
 GetMethodImpl   返回由当前的 MulticastDelegate 表示的静态方法。
 GetObjectData   用序列化该实例所需的所有数据填充 SerializationInfo 对象。
 MemberwiseClone   创建当前 Object 的浅表副本。
 RemoveImpl   调用列表中移除与指定委托相等的元素

GetInvocationList() 的用途



当委托有多个返回值时


当你编写一个 delegate委托 或 Func<>泛型委托 ,并为实例绑定多个方法时,每个方法都有一个返回值。可能会遇到这种情况:


class Program
    {
        public static string a(string str)
        {
            Console.WriteLine("方法a");
            return str+"方法a";
        }
        public static string b(string str)
        {
            Console.WriteLine("方法b");
            return str + "方法b";
        }
        public static string c(string str)
        {
            Console.WriteLine("方法c");
            return str + "方法c";
        }
        static void Main(string[] args)
        {
            Func<string, string> func=a;
            func += b;
            func += c;
            Console.WriteLine(func("测试"));
            Console.ReadKey();
        }
    }


微信图片_20220426120419.png


调用委托后,只能获取到最后一个调用方法的返回值。


 

使用 GetInvocationList()


GetInvocationList() 能够返回 这个委托的方法链表。

通过使用循环,把每个方法顺序调用一次,每次循环中都会产生当前调用方法的返回值。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

classProgram

{

    publicstaticstringa(stringstr)

    {

        Console.WriteLine("方法a");

        returnstr+"方法a";

    }

    publicstaticstringb(stringstr)

    {

        Console.WriteLine("方法b");

        returnstr + "方法b";

    }

    publicstaticstringc(stringstr)

    {

        Console.WriteLine("方法c");

        returnstr + "方法c";

    }

    staticvoidMain(string[] args)

    {

        Func<stringstring> func=a;

        func += b;

        func += c;

        varfunclist = func.GetInvocationList();

        foreach(Func<stringstring> f infunclist)

        {

            Console.WriteLine(f("测试"));

        }

        Console.ReadKey();

    }


  微信图片_20220426120422.png

 

相当于把委托里顺序调用的方法分离成一个列表,通过循环调用,循环获取。


相关文章
|
2月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
2月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
2月前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
182 0
|
10天前
|
设计模式 IDE 测试技术
提升 C#编程效率的技巧与方法
【4月更文挑战第20天】提升C#编程效率的关键技巧包括:选择合适的IDE(如Visual Studio)、掌握基础语法、规划良好代码结构、使用代码生成工具、复用代码、利用库和框架、定期重构、应用设计模式、避免过度设计、进行代码审查、自动化测试、学习新技术、养成良好编程习惯、定期备份代码及参与技术社区。通过这些方法,开发者能提高代码质量和开发效率。
|
22天前
|
C#
C# Dev TreeList常用属性方法
C# Dev TreeList常用属性方法
|
2月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
2月前
|
C# 索引
C#学习相关系列之base和this的常用方法
C#学习相关系列之base和this的常用方法
|
2月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
2月前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式