news 2026/8/9 18:23:15

C#中记录一下使用字符串文本调用泛型方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#中记录一下使用字符串文本调用泛型方法

C#是静态类型语言,泛型参数在编译时必须确定,不能直接使用一个字符串来指定泛型参数,可以通过反射或者缓存打开窗口的委托来调用泛型方法。​​​​​​​​​​​​​​​​​​​​​​​​​​​​

准备:

准备几个测试供后续使用,代码如下:

public class Animal { public virtual void Print() { } } public class Dog : Animal { public override void Print() { Debug.Log("这是一只狗"); } } public class Duck : Animal { public override void Print() { Debug.Log("这是一只鸭子"); } } public class Test : MonoBehaviour { void Start() { } public void SummonAnimal<T>() where T : Animal,new() { T animal = new T(); animal.Print(); } }

方案一:

代码如下:

public void CallAnimalByName(string animalClassName) { // 获取程序集中的类型 var type = Assembly.GetExecutingAssembly() .GetTypes() .FirstOrDefault(t => t.Name == animalClassName && t.IsSubclassOf(typeof(Animal))); if (type != null) { // 通过反射调用泛型方法 var method = typeof(Test).GetMethod("SummonAnimal"); var genericMethod = method.MakeGenericMethod(type); genericMethod.Invoke(this, null); } }

在Test的Start方法中调用

void Start() { CallAnimalByName("Dog"); }

结果:

方案二:

代码如下:

private Dictionary<string, Action> animalActions = new Dictionary<string, Action>(); // 注册窗口类型 public void RegisterWindow<T>() where T : Animal, new() { string animalName = typeof(T).Name; animalActions[animalName] = () => SummonAnimal<T>(); } // 通过配置调用 public void CallAnimalByName2(string animalName) { if (animalActions.TryGetValue(animalName, out Action action)) { action(); } }

在Test的Start方法中调用:

void Start() { RegisterWindow<Duck>(); CallAnimalByName2("Duck"); }

结果:​​​​​​​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 17:05:46

企业如何利用AgenticHub实现自动化流程管理

引言&#xff1a;自动化流程管理的迫切需求 随着企业对效率和成本控制的需求不断增长&#xff0c;自动化流程管理成为企业提升运营效率的关键。AgenticHub的智能体平台为企业提供了灵活的流程编排工具&#xff0c;帮助它们轻松实现自动化业务流程&#xff0c;提升企业整体智能化…

作者头像 李华
网站建设 2026/8/9 9:55:56

Java Web 养老院管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着人口老龄化趋势的加剧&#xff0c;养老院的管理需求日益复杂化&#xff0c;传统的人工管理方式已无法满足高效、精准的服务要求。养老院管理系统通过信息化手段&#xff0c;能够有效提升管理效率、降低运营成本&#xff0c;并为老年人提供更优质的服务。该系统整合了入…

作者头像 李华
网站建设 2026/8/9 2:09:56

5种必知的前端数据加密防护技术:从React安全到浏览器原生方案

在现代前端开发中&#xff0c;数据安全防护已成为开发者必须掌握的硬核技能。随着单页面应用的普及&#xff0c;前端数据加密、React安全防护等技术需求日益凸显。本文将带你深入剖析前端安全威胁&#xff0c;对比不同技术方案&#xff0c;分享实战应用场景&#xff0c;并展望未…

作者头像 李华
网站建设 2026/8/8 14:46:06

面试必问:如何快速定位BUG?BUG定位技巧及N板斧!

01 定位问题的重要性 很多测试人员可能会说&#xff0c;我的职责就是找到bug&#xff0c;至于找原因并修复&#xff0c;那是开发的事情&#xff0c;关我什么事&#xff1f; 好&#xff0c;我的回答是&#xff0c;如果您只想做一个测试人员最基本最本分的事情&#xff0c;那么可…

作者头像 李华
网站建设 2026/8/8 3:21:00

Wan2.2-T2V-A14B如何生成带有烟花绽放效果的节日庆典视频?

如何用 Wan2.2-T2V-A14B 一键生成“烟花绽放”的节日庆典视频&#xff1f;✨&#x1f386; 你有没有遇到过这种情况——马上要发春节宣传视频了&#xff0c;团队还在熬夜剪辑烟花特效、调色、加人声欢呼&#xff0c;结果客户一句“氛围不够喜庆”就得全部重来&#xff1f;&…

作者头像 李华