首页
学习
活动
专区
工具
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 值,你可以假定它等价于 FuncT,bool>,Predicate 常用于对 collection 进行一组条件检索。...C# 中使用 Action 你可以使用 委托 去实现事件和回调方法,C#委托非常类似于C++中的函数指针,但是 C# 中的 委托 是类型安全的,你可以将方法作为参数传递给委托从而让委托指向该方法。...Func 接下来的代码片段展示了如何在 C# 中使用 Func 委托,最终方法会打印出 Hra(基本薪资的 40%) 的值,基本薪资是作为参数传下去的,如下代码所示...,Func 委托的第二个参数表示方法的返回值,在上面这个例子中,它就是计算后的 Hra 值,作为 double 型返回。

2.7K20

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

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

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

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

    1.2K20

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

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

    22520

    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、Lua的GC原理是什么?...11.100个元素集合分别用list(key每一个元素的字段)和 dictionary(key),查找元素,两者的时间复杂度 12.泛型是什么 13.ArrayList和List作为泛型,有存储差别吗

    4.1K11

    30分钟LINQ教程

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

    80520

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

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

    1K50

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

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

    1.2K80

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

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

    1.5K10

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

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

    1.3K20

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

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

    85130

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

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

    2.6K30

    Go有哪些特殊的语言特性?

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

    19210

    .NET基础面试题整理

    所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用 注:1.虽然结构与类的类型不一样,可是他们的基类型都是对象...ListT>:通过索引访问强类型的列表 DictionaryT>:表示键值对的集合 QueueT>:队列 StackT>: 栈 购物车用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.5K21

    了解 C# 13 中的集合params

    然而,在C#的最新版本中,现在可以将params与其他集合类型一起使用了。...随着C# 13的发布,现在可以直接将ReadOnlySpanT>传递到方法中,这提高了可用性和性能。 示例:以下代码展示了在C#中使用params关键字让方法接受数量可变的参数的用法。...现在,通过将params关键字与ListT>一起使用,你可以轻松处理动态大小的集合。...可以直接传递List对象,甚至可以即时将列表与其他日志条目合并。 与集合协作:列表比数组更具动态性。使用ListT>,可以在创建后添加、删除或修改元素。...通过支持ReadOnlySpanT>和ListT>等类型,开发人员现在可以使用能提供更好内存管理和性能提升的集合,同时保持API接口简洁直观。

    6010

    .NET C#中的5个提示和技巧

    Any() 适用于任何 IEnumerableT>,例如 ListT>、Array 和更多集合类型。...以下是您通常将项目添加到集合的方法: List products = ProductList.Products; products.Add(newProduct(){ Id =...Add() 方法出现错误: 但它真的更快吗?...这就是结果“: 结果是最小的,但测试也很小。 3:块 (.NET 6) 块是一种将集合拆分为较小组或特定大小的 “块” 的方法。这样,您可以将一长串项目分成更小的组,使其更易于使用。...C# 花了很长时间才解决这个问题。但现在,在 .NET 9 中,我们终于获得了专用锁! 为什么这这么重要?嗯,专用锁类型会改进代码,使其更灵活,使代码更简洁,还可以提高性能。 变化很大吗?不!

    6010

    泛型

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

    1.5K10

    关于 .NET 8 中装箱和取拆箱的不为人知的真相:每个 C# 开发人员都需要了解的内容

    如果我告诉您,像装箱和取消装箱这样的简单概念可以决定 .NET 应用程序的性能,该怎么办?如果您认为装箱和取消装箱只是普通的 C# 功能,请再想一想。...intfloatchar 通过装箱,可以将值类型视为对象,使它们能够存储在堆上、传递给需要对象的方法,或插入到 or 等集合中(从早期的 .NET 版本开始)。....NET 8 中的优化解决方案:使用 和ListT>SpanT> 为避免装箱,请使用 generic 而不是 ,并进一步优化以获得高性能内存处理:ListT>ArrayListSpanT> public...**List**ListT> 使用 : 允许您以高效的方式处理内存,从而减少堆分配并启用基于堆栈的内存访问。...SpanT>ListT> 类型安全: 泛型的使用可确保编译时类型检查,从而消除潜在的拆箱错误。 何时应避免装箱和取消装箱?

    11210
    领券