news 2026/6/14 18:50:45

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/6/15 1:26:07

多场景应用支持, AgenticHub如何根据业务需求定制智能体

引言&#xff1a;智能体的多场景应用 智能体技术已不仅限于某一特定领域&#xff0c;随着技术的不断发展&#xff0c;它已可以应用于各个行业&#xff0c;满足不同行业的需求。AgenticHub作为一款灵活的智能体平台&#xff0c;能够根据企业的特定业务需求&#xff0c;快速定制和…

作者头像 李华
网站建设 2026/6/15 11:44:37

人工智能之数学基础 线性代数:第一章 向量与矩阵

人工智能之数学基础 线性代数 第一章 向量与矩阵 文章目录人工智能之数学基础 线性代数前言一、基本定义1. 向量&#xff08;Vector&#xff09;2. 矩阵&#xff08;Matrix&#xff09;二、基本运算1. 向量/矩阵加减法示例&#xff08;矩阵&#xff09;&#xff1a;Python 实现…

作者头像 李华
网站建设 2026/6/15 15:44:08

重塑Java工程效能:全流程智能开发平台实践解析

在Java企业级开发中&#xff0c;研发人员常面临工作流程割裂的挑战&#xff1a;从需求分析、接口定义、数据建模到代码实现&#xff0c;需在不同工具与上下文间频繁切换&#xff0c;不仅效率受限&#xff0c;也易产生设计不一致与细节遗漏。针对这一痛点&#xff0c;专注于Java…

作者头像 李华
网站建设 2026/6/15 5:39:18

Spring Boot + Kafka 实战:从入门到避坑,小白也能轻松上手!

视频看了几百小时还迷糊&#xff1f;关注我&#xff0c;几分钟让你秒懂&#xff01;一、为什么我们需要 Kafka&#xff1f;在现代微服务架构中&#xff0c;系统之间的通信不能总是“你等我、我等你”——这会导致性能瓶颈甚至雪崩。Kafka 就是一个高性能、高吞吐、可扩展的消息…

作者头像 李华
网站建设 2026/6/15 13:54:39

UGC链游开发白皮书:NFT道具合约的6层架构与80%项目忽视的权限风险

引言&#xff1a;当UGC遇见NFT&#xff0c;链游的“造物革命”在传统游戏中&#xff0c;玩家花费数百小时打造的装备可能因服务器关闭或账号封禁化为乌有&#xff1b;而在区块链游戏&#xff08;链游&#xff09;中&#xff0c;NFT技术让虚拟道具成为玩家真正拥有的数字资产。更…

作者头像 李华
网站建设 2026/6/14 20:03:40

Restormer 去雨(Deraining)任务代码运行全流程

本文将系统梳理基于 Restormer 模型实现图像去雨&#xff08;Deraining&#xff09;任务的完整流程&#xff0c;涵盖代码执行逻辑、核心文件架构及关键操作步骤&#xff0c;为实验的理解与复现提供清晰指引。若需获取适配新版环境的 Restormer 配置教程&#xff08;含避坑要点&…

作者头像 李华