首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以使用List <T>作为方法指针的集合吗?(C#)

当然可以。在C#中,您可以使用List<T>作为方法指针的集合。List<T>是一个泛型类,可以存储任何类型的对象,包括委托(即方法指针)。

首先,您需要定义一个委托类型,例如:

代码语言:csharp
复制
public delegate void MyDelegate();

然后,您可以创建一个List<MyDelegate>来存储方法指针:

代码语言:csharp
复制
List<MyDelegate> delegates = new List<MyDelegate>();

接下来,您可以将方法指针添加到列表中:

代码语言:csharp
复制
delegates.Add(MyMethod1);
delegates.Add(MyMethod2);

最后,您可以通过使用List<T>ForEach方法来调用列表中的所有方法指针:

代码语言:csharp
复制
delegates.ForEach(d => d());

这样,您就可以使用List<T>作为方法指针的集合了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用C#Action,Func和Predicate?

nsdr=true 委托是一个类型安全函数指针,它可以引用与委托具有相同签名方法。委托常用于实现回调方法或者事件机制,在C#中一般用 "delegate" 关键字声明。...Predicate所引用方法接收一个或者多个泛型参数并且返回一个 bool 值,你可以假定它等价于 Func,Predicate 常用于对 collection 进行一组条件检索。...C#使用 Action 你可以使用 委托 去实现事件和回调方法C#委托非常类似于C++中函数指针,但是 C# 委托 是类型安全,你可以方法作为参数传递给委托从而让委托指向该方法。...Func 接下来代码片段展示了如何在 C#使用 Func 委托,最终方法会打印出 Hra(基本薪资 40%) 值,基本薪资是作为参数传下去,如下代码所示...,Func 委托第二个参数表示方法返回值,在上面这个例子中,它就是计算后 Hra 值,作为 double 型返回。

2.5K20

.NET面试题系列 - 委托与事件

C#中如果没有了事件,那绝对是一场灾难,令开发者寸步难行。而委托又是事件基础,可以说是C#精髓,个人认为,其地位如同指针之于C语言。...不过,这样做有一个不好地方,就是如果日后我们再增加其他运算方法(具有相同签名),我们就需要修改Calculate方法,为switch增加更多分支。我们不禁想问,可以拿掉这个switch?...简单来说,就是在函数式编程环境下,你是在写函数,将一个集合通过函数映射到另一个集合。例如f(x)=x+1就是一个这样映射,它将输入集合中所有的元素都加1,并将结果作为输出集合。...由于你所有的函数都是吃进去集合,吐出来集合,所以你当然可以pipeline式进行调用,从而实现一连串操作,既简单又优雅。 许多语言,例如javascript,C#都有函数式编程性质。...委托允许你把方法作为参数。 相比C函数指针C#委托是类型安全可以方便获得回调函数返回值,并且可以通过委托链支持多路广播。 EventHandler委托类型是.NET自带一个委托。

1.1K20

C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第二部分

你能给我们描述一下? Hejlsberg: 好,认为我们现在所说面向组件类特点是极为重要。我们努力做到没有其他方法可以做这件事情。...当你使用 where , orderby 和 select 语句来写查询语句时候,我们把这个转换成对等方法调用:Where, OrderBy 和 Select 集合。...Osborn: 牛呀,这么说 .NET 实现泛型允许我们…… Hejlsberg: 太对了。如果定义一个 List 作为一个 object , 可以问 “这是什么“?...系统可以告诉,这是一个列表。他还可以告诉我们,这是一个 ListT 代表 Customers 类。...可以说:为什么不给我一个 System.Type List可以是,你为什么没有把 T 绑定到 Order ?也就是说我们可以把类型转换为 List ,并创建他一个实例。

84931

精:C#历来版本特性一览

前言 使用 C# 作为开发语言已经 15 个年头了,受惠于 C# 不断更新,伴随着大量新特性与大量语法糖,让更加容易写出简洁、高效代码。...看看这些金光闪闪特性吧: 泛型 分部类型【partial 关键字】 匿名方法【利用 delegate 运算符】 可为空值类型【Nullable 或 T?...写法】 Lambda 表达式 表达式树 扩展方法 隐式类型本地变量【var 关键字】 分部方法【partial 关键字可以作用在方法上,没用过该特性】 对象和集合初始值设定项【Foo foo = new...等等】 现有方法新重载【例如 String.Join 方法添加了可以连接 IEnumerable 集合成员新重载。】...= (4.5, 3);】 模式匹配 本地函数【内部函数,让想起了 Delphi】 ref 局部变量【指针既视感】 弃元【(_, _, foo) = bar.baz();,配合元组,你可以给,但我可以不要

14720

2022年Unity面试题分享

通过这个实现了 IEnumerator接口对象A,可以遍历访问集合类对象中每一个元素对象 对象A访问MoveNext方法方法为真,就可以访问Current方法,读取到集合元素。...什么场合下使用? unsafe 非托管代码,配合fixed一起使用 ,用在需要指针操作场合 项目背包系统任务装备栏使用到 ---- 【重点面试题】23、C#中ref和out关键字有什么区别?...不支持指针,但可以使用Unsafe,不安全模式,CLR不检测 C#可以定义指针类型、整数型、实数型、struct结构体 C#指针操作符、C#指针定义 使用fixed,可以操作类中值类型 相同点...Data,完成后会回调方法,将文件Data作为参数传出 6、检查是否初次安装 ---- 6、网络客户端C# 和 Lua ---- 7、LuaGC原理是什么?...11.100个元素集合分别用list(key每一个元素字段)和 dictionary(key),查找元素,两者时间复杂度 12.泛型是什么 13.ArrayList和List作为泛型,有存储差别

3.8K10

30分钟LINQ教程

可以负责任告诉你,这样写不会影响性能!       ...如果需要返回值的话,可以直接写return语句 10.扩展方法     (1)源起       如果想给一个类型增加行为,一定要通过继承方式实现?       不一定!     ...来看看List类型签名:           public class List : IList, ICollection, IEnumerable, IList, ICollection...:       假设我们需要遍历一个庞大集合       只要集合某一个元素满足条件       就完成了任务       你认为需要把这个庞大集合全部加载到内存中来?       ...      也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法       来看看这段代码:       List arr = new List<

71120

使用C#进行数据库增删改查(一)

这节讲一下如何使用C#进行数据库增删改查操作,本节以SQL Server数据库为例。....NET 平台,使用ADO.NET 作为与数据库服务器桥梁,我们通过ADO.NET就可以使用C#语言操作数据库,它命名空间在System.Data下,要访问SQL Server数据库,就要引用其下...它有多种表示形式,一般使用如下形式: string connString = "server=....如果有数据,SqlDataReader中指针就指向第0行,我们需要调用Read()方法,将指针下移,如果下一行不为空,该方法返回true,否则返回false。...一般我们会将这些操作封装成工具类,从而简化代码,下面贴出自己写一个sql工具类,读者可以自行拷贝学习、使用

1.4K10

unity c#面试_spring面试题及答案

ArrayList 是一个数组,继承实现了List基类,是比较传统使用程序数组变量 List是调用List,用了C#泛型特性 4.请简述GC(垃圾回收)产生原因,并描述如何避免?...,而接口只是定义各方法,并没有具提实现,子类继承抽象父类,可以只是继承部分方法或直接引用父类方法。...|IOS等平台也是运行正常,反射作用主要是跨程序集调用,作为一个基本抽象思维程序员,应该要理解跨当前运行时程序集本身当然也一个程序集,C#反射能广泛应用,并且出错几乎是0原因,应该就是C#程序集开放...Unity3D支持作为脚本语言名称 C# JS Boo – 这个也不清楚 13.Unity3D是否支持写成多线程程序?...Prefab在实例化时候用到,主要用于经常会用到物体做成一个集合方便反复使用,在移动环境中,由于Prefab一般体积比较大,常需要实例化,拆分成合适大小AssetBundle,离线下载比较恰当 26

1.2K20

Java魔法堂:解读基于Type Erasure泛型

可是记忆犹新啊,那时因项目需求我从C#转身到Java怀抱,然后因JDK1.4少了泛型这样语法糖(还有自动装箱、拆箱),让受尽苦头啊,不过也反映自己水平还有待提高,呵呵。...注意点——父类作为类型参数,则可以子类实例作为集合元素 List lst = new ArrayList(); lst.add(new S());   2....当集合类型参数 ? 为时,无法向集合添加除null外其他类型实例。(null属于所有类子类,因此可以赋予到未知类型中) List<?...我们可以向非泛型集合添加任何类型元素, 而通配符泛型集合则只允许添加null而已, 从而提高了类型安全性. 而且我们还可以使用带限制条件带边界通配符泛型集合呢! 3. 声明带边界通配符 ?...class Fruit{ // 类型参数占位符作为实例字段类型 private T fruit; // 类型参数占位符作为实例方法返回值类型

1.1K80

Java魔法堂:解读基于Type Erasure泛型

可是记忆犹新啊,那时因项目需求我从C#转身到Java怀抱,然后因JDK1.4少了泛型这样语法糖(还有自动装箱、拆箱),让受尽苦头啊,不过也反映自己水平还有待提高,呵呵。...注意点——父类作为类型参数,则可以子类实例作为集合元素 List lst = new ArrayList(); lst.add(new S());   2....当集合类型参数 ? 为时,无法向集合添加除null外其他类型实例。(null属于所有类子类,因此可以赋予到未知类型中) List<?...我们可以向非泛型集合添加任何类型元素, 而通配符泛型集合则只允许添加null而已, 从而提高了类型安全性. 而且我们还可以使用带限制条件带边界通配符泛型集合呢! 3. 声明带边界通配符 ?...class Fruit{ // 类型参数占位符作为实例字段类型 private T fruit; // 类型参数占位符作为实例方法返回值类型

99850

.NET中那些所谓新语法之三:系统预定义委托与Lambda表达式

还是以刚刚那个数据集合PersonList为例,在很多时候我们需要对从数据库中读取数据集合进行二次筛选,这时我们可以使用List集合Select方法,我们将一个Func委托实例作为方法参数传递给Select...它定义很简单:(这里就不再对其进行解释了) public delegate bool Predicate(T obj) 此委托由 Array 和 List几种方法使用,常用于在集合中搜索元素...集合为例,假如我们要筛选出Age>20Person,我们就可以使用FindAll方法。...此委托由 Array 类 Sort(T[], Comparison) 方法重载和 List Sort(Comparison) 方法重载使用,用于对数组或列表中元素进行排序...③实例化Comparison委托变量,并将方法指针传入该委托;     ④调用List实例Sort方法,并传入Comparison委托实例;     其中,前面两步①和②可以通过反编译后C#代码获知

77530

编写高质量代码:改善C#程序157个建议

总是使用TryParse,不使用Parse 恰当使用Nullable类型 如果数据库字段可为null,那么对应C#实体类属性也应当可以为null。使用int?...类型格式化字符串 IFormattable和IFormatProvider用法。这个两个接口项目中不常使用,但是IFormatProvider倒是可以作为分离变化教程来学习。...深度复制和浅度复制 使用dynamic简化反射实现 效率可以提高很多。 集合和LINQ 元素数量固定使用数组;不固定使用List。...{ new Item(), new Item(), new Item() }; 使用泛型集合,不再使用ArrayList 选择合适集合 常用集合:数组、List、Stack...不要用List作为自定义集合基类 因为List没有virtual方法,无法重写,因此最好自己实现一个集合基类。

2.5K30

Go有哪些特殊语言特性?

此时,p 就是一个指针类型,如果按照 C 或者 C++,是无法直接操作 People 中字段 name ,但是 Go 对指针操作进行了简化,可以对一个指针类型变量直接操作其内字段,比如: func...在日常开发中几乎很少能用得到数组,因为数组没有扩展能力,比如 C#中我们也几乎用不到数组,能用数组地方基本都用List。...我们知道数组是没有容量这个概念(其实是有的,只不过容量就是长度),而切片容量其实就类似于 C#List容量(知道大部分 C#er 在使用 List 时候根本不会去关心 Capacity...这样函数就是结构体函数,或者更直白一点就是 C#方法。 在默认情况下,我们都是使用指针类型为结构体定义函数,当然也可以不用指针,但是在那种情况下,函数所更改内容就和原结构体完全不相关了。...而 Spring Cloud 中,代码使用可以通过一个简单注解(也就是 C#特性)@Transactional,那这个方法就是支持事务,使这种复杂技术级代码完全和业务代码解耦,开发者完全按照正常业务逻辑写业务代码即可

14610

.NET基础面试题整理

所以结构处理作为基类型对待小对象,而类处理某个商业逻辑因为结构是值类型所以结构之间赋值可以创建新结构,而类是引用类型,类之间赋值只是复制引用 注:1.虽然结构与类类型不一样,可是他们基类型都是对象...List:通过索引访问强类型列表 Dictionary:表示键值对集合 Queue:队列 Stack: 栈 购物车用Dictionary模拟,OA中获取员工列表等数据时候...能否举一些反射常用场景?有人说反射性能较差,您怎么看待这个问题?有什么办法可以提高反射性能?...在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您平时最常用哪些?...委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数指针。 匿名方法:就是没有实际方法声明委托实例。或者说,它们定义是直接内嵌在代码中

1.6K21

C#.NET Web 部分复习总结(面试常问)

换成大白话:遇到了一个问题,不知道怎么解决,但是接下来要做事情需要这个问题结果作为前提,就去找一个人来帮我得出结论,岂不美哉。...在C#中,委托作用是这样描述:委托就像一个函数指针,在程序运行时可以使用它们来调用不同函数。 简单委托 那委托需要承载哪些信息呢?...匿名函数 匿名函数是一个“内联”语句或表达式,可在需要委托类型任何地方使用可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。...通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。...在 C# 3.0 及更高版本中,Lambda 表达式取代匿名方法作为编写内联代码首选方式。

1.4K21

泛型

如今,泛型已经广泛应用于C#各个领域,其中用得较多有如下几项: 集合(在集合中泛型一如既往地重要); 委托(尤其是在LINQ中应用); 异步代码(Task表示该方法将返回一个类型为T值);...认为,数组协变机制是C#早期一处设计失误。有关数组协变内容超出了本书范畴,暂不讨论。...使用泛型,还可以解决使用元素类型作为方法输入类型这一问题。下面将介绍更多术语,以便进一步深入探讨。...前面IAmConfusing代码中用枚举类型作为非泛型类示例并 非巧合,接下来它会派上用场。3假设定义了类型形参,但是在方法签名中并不使用该类型形参,这种做法虽然完全可行,但毫无意义。...(List items) where T : IFormattable 使用泛型约束,不仅可以约束方法实参值类型,也会约束方法内部如何操作和使用T类型值。

1.3K10

走进C#并发队列ConcurrentQueue内部世界

前几天碰到一个小问题又读了一遍ConcurrentQueue源码,那就拿C#中比较常用并发队列ConcurrentQueue作为开篇来聊一聊它实现原理。 话不多说,直奔主题。...事实上,在C#普通队列Queue类型中选择使用数组进行实现,它实现了一套扩容机制,这里不再详细描述,有兴趣直接看源码,比较简单。...使用集合创建队列过程和上面类似,只是多了两个步骤:入队和扩容,下面会重点描述这两部分所以这里不再过多介绍。...还有一个TryPeek()方法和出队类似,它是从队首获取一个元素但是无需移除该元素,可以看做Dequeue简化版,不再详细介绍。...Interlocked.Decrement(ref m_numSnapshotTakers); } return list; } 可以看到,ToList逻辑和Count非常相似,都是先计算出两个首尾位置指针

2K20

快速入门系列--CLR--03泛型集合

Queue,构建一个环形缓冲区,实际维护一个基础数组,包含两个索引,分别记住入队和出队位置(Slot),如果入队指针追上出队指针,则进行扩容。...提供Enqueue、Dequeue、Peek等方法进行入队、出队、查看操作。 Stack,其实现更简单,可以看做是一个提供Push、Pop、Peek操作List。...,后者是其包装类,使用ConcurrentQueue作为后台存储,提供ToArray方法获得集合当前状态快照,TryXXX方法允许有效失败模式减少对锁需求。...实现,其GetEnumerator()方法返回集合快照,迭代时可以改变集合,但该改变不会反应到迭代器中。...尤其在使用非线程安全字典类进行并发操作时,有时会出现死循环等情形,尤其需要注意。 Tip:where T:new()  参考文献 Jon, Skeet. 深入理解C#(第3版)[M].

72970
领券