有时候我们在编写程序的时候会突然使用一些比较少见的用法,比如今天在编写程序过程中,遇到这样一个问题。这个问题我以前没有遇到过,刚开始不知道怎么处理比较好。在搜寻的过程中发现其实.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。
可以将上述过程提取成公有方法,看看下面代码。
public static T FromType<T,TK>(TK text) { try { return (T) Convert.ChangeType(text, typeof (T), CultureInfo.InvariantCulture); } catch { return default(T); } }