有时候我们在编写程序的时候会突然使用一些比较少见的用法,比如今天在编写程序过程中,遇到这样一个问题。这个问题我以前没有遇到过,刚开始不知道怎么处理比较好。在搜寻的过程中发现其实.net类库已经提供了现成的处理方法。因此在此记录一下,仅供以后学习参考,也希望能够有同样需要的朋友一个参照。下面来看看这个问题吧!
问题描述:有一个泛型方法如public List<T> getList<T>(),它返回的是一个List集合,List集合中元素的类型由调用泛型方法时指定。在getList方法具体实现中,可能需要将某种类型的数据转换成T类型,然后添加到List集合中。
举例说明:调用方法getList<int>(),数据本身是string类型,这样则需要将string类型数据类型转换成int类型,才能添加到List<int>集合中。
解决方法:
我们在命名空间System下,找到了Convert类下有一个ChangeType方法,它有三种重载方式,如下图所示:
关于这个方法的详细介绍请参照MSDN:http://technet.microsoft.com/zh-cn/library/system.convert.changetype(en-us).aspx
有了这个方法,我们来看一下如何解决这个问题了。
- 获取泛型类型T的System.Type对象,使用typeof(T)。
- 使用Convert.ChangeType方法将String转换成等效于T对象的object。
- 将得到的object对象转换成T。
可以将上述过程提取成公有方法,看看下面代码。
1 2 3 4 5 6 7 8 9 10 11 | public static T FromType<T,TK>(TK text) { try { return (T) Convert.ChangeType(text, typeof (T), CultureInfo.InvariantCulture); } catch { return default (T); } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)