悟道人生

渴望闲云野鹤的生活,面对自然,鸟鸣虫唱,星辰为伴,没有拘束,没有苦恼,有的只是神仙般的生活

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

  有时候我们在编写程序的时候会突然使用一些比较少见的用法,比如今天在编写程序过程中,遇到这样一个问题。这个问题我以前没有遇到过,刚开始不知道怎么处理比较好。在搜寻的过程中发现其实.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

    有了这个方法,我们来看一下如何解决这个问题了。 

  1. 获取泛型类型T的System.Type对象,使用typeof(T)。
  2. 使用Convert.ChangeType方法将String转换成等效于T对象的object。
  3. 将得到的object对象转换成T。

  可以将上述过程提取成公有方法,看看下面代码。

  public static T FromType<T,TK>(TK text)
        {
            try
            {
                return (T) Convert.ChangeType(text, typeof (T), CultureInfo.InvariantCulture);
            }
            catch
            {
                return default(T);
            }
        }

    

posted on 2010-08-09 17:34  凌风有约  阅读(6400)  评论(0编辑  收藏  举报