C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值
在日常使用委托时,有以下常用方法
| 方法名称 | 说明 |
|---|---|
| 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();
} }

调用委托后,只能获取到最后一个调用方法的返回值。
使用 GetInvocationList()
GetInvocationList() 能够返回 这个委托的方法链表。
通过使用循环,把每个方法顺序调用一次,每次循环中都会产生当前调用方法的返回值。
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;
var funclist = func.GetInvocationList();
foreach (Func<string, string> f in funclist)
{
Console.WriteLine(f("测试"));
}
Console.ReadKey();
}

相当于把委托里顺序调用的方法分离成一个列表,通过循环调用,循环获取。
C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值的更多相关文章
- 在IDEA中设置方法自动注释(带参数和返回值)
第一部分 设置 打开设置面板 新建 在线模板 新建自动添加规则,注意 这里触发的字符 不能随便写 必须为 * Template text 区域 看上去有点乱,但是是为了显示时的对齐,该区域的内容如下( ...
- BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题
BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题 原文:http://www.sufeinet.com/thread-3707-1-1.html 大家可以先看看我上 ...
- Java中的方法(形参及实参)return返回类型
如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...
- java方法强制传递引用参数(做为返回值),改变被传递参数值。
Java传递参数分为2种: 值类型,Java里面也叫简单类型,这种参数类型的传递的是它的副本拷贝: 引用类型,传递的是对象引用地址,如果在方法内改变该参数对象属性即是对原引用对象的改变:如果不想这样传 ...
- 存储过程: 存储过程(stored procedure)有时也称为sproc。存储过程存储于数据库中而不是在单独的文件中,有输入参数、输出参数以及返回值等。
存储过程示例一: 执行存储过程方法一: 执行存储过程方法二: 存储过程可以定义返回值: 修改存储过程: 利用存储过程查找三个表内的信息: 练习: 超市管理系统:表一:门店仓库表 MenDian ...
- 请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
这是牛客网上的一道题~ 题意:遇到重复元素就删除(留下第一个不重复的即可). 解题思路:双循环一遍数组,arr[i] == arr[j] 成立时,删除 arr[j],并将 arr[j] 直接push到 ...
- 求助,JS 方法调用的问题,写了返回值,确调用时返回Undefined(新人第一次写)
文本框txtUserName 的Onbulr 绑定方法 txtUserNameOnblur 这可以正常执行 而下面的btnRegister 的click 事件则无法正常调用 txtUserNa ...
- php中echo、print、print_r、printf的返回值
1.echo 无返回值,是一个语言结构.在输出多个参数时不可以使用小括号; 2.print返回值为1:如:$x = 0; echo print $x."<br/>";/ ...
- java read读取方法 之 指定读取大小,根据返回值判断是否读取所有的内容 -1表示读取完毕
当读取的内容小于指定的长度时候 字符数组里面会出现一部分字符是上一次遗留下来的情况
随机推荐
- 快捷键 -- windows
win+数字 : 打开任务栏第n个图标 Win+D :快速显示桌面 Win+R :快速运行打开软件 例如 cmd services,msc Win+E:打开资源管理器 Win+L:快速锁定计算机 ...
- weblogic 异常常见处理方法
1.系统日志 通过分析weblogic的系统日志及应用程序出错的地方,可能找到异常的原因. 2. 数据库连接 如果用户访问系统过慢,且连接池已经占满而weblogic的线程数量很少,就要查看应用是否没 ...
- PgAdmin4连接数据库报错:Unable to connect to server: ERROR: unrecognized configuration parameter "bytea_output"
原因: PgAdmin 4不再支持PostgreSQL 9.0 和更早的版本 我的版本是8.2.15 template1=# select version(); version ----------- ...
- [PY3]——合并多个字典或映射(collections模块中的ChainMap 类)
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用 collections 模块中的 ChainMap 类 Cha ...
- c#删除list中的元素
public static void TestRemove() { string[] str = { "1", "2", "d", &quo ...
- 从0开始整合SSM框架--3.整合SpringMvc
前面面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合.1.配置spring-mvc.xml <beans xmlns="http://ww ...
- JavaScript的原型链继承__propt__、prototype、constructor的理解、以及他们之间相互的关系。
回想自己已经工作了有一段时间了,但是自己对JavaScript的原型链.和继承的理解能力没有到位,最近他们彻底的整理并且复习了一遍. 本案例中部分文案来自网络和书籍,如有侵权请联系我,我只是把我的理解 ...
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...
- Java学习--扑克牌比大小的小游戏
实现:生成五十四张牌,然后进行洗牌,输入两名玩家,然后分别发两张牌,进行比较大小,两张牌中拥有较大一张牌的玩家获胜 Card.java代码如下: package com.cardgame; publi ...
- 小菜庄园 Spring------图片的上传和下载
1.图片的上传前台三个条件 文件上传页面的3个要求: < 1.表单提交为post.mothod="post" < 2.表单的 ...