一个类,接受一个object的参数,当参数为List<T>时,我需要知道T到底是什么类型,然后我需要创建T类型的实例进行操作。我自己试了一下,谢了一个Data类,也就是说那个参数实际为List<Data>我obj.GetType()后看到FullName属性为
System.Collections.Generic.List`1[[WindowsApplication40.Data, WindowsApplication40, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]貌似是找到Data类了,也就是第一个[后面,可是我又觉得不保险,总不能通过split来分析吧。。还有其它办法吗?

解决方案 »

  1.   

    无须判定直接封一个泛型方法即可
    list<T> init_list<T>(T obj)
    {
       return new list<T>();
    }
      

  2.   


    恩,这样做倒是也可以,但是还是不是很完美呀,其实就是我在自己写一个控件,其中我要写一个类似DataSource的属性,上述方法就好比让调用者来告诉我你的是什么类型,而不是底层自己判断,.net自带的控件都是自动判断的。
      

  3.   

        if (obj is IEnumerable)
        {
            IEnumerable list = obj as IEnumerable;
            foreach (object o in list)
            {
                o.GetType();
            }
        }
      

  4.   

    恩,我明白你的意思,实际上微软的内部控件本身也并不判断type类型因为,控件内部实际上都是使用的接口做为判定的if(obj is 某接口)
    {
      接口 obj接口=(接口)obj
     
    }
      

  5.   

    这样?那我给它一个List<T>,按这样的逻辑岂不是判断不了?
      

  6.   

    7楼的方法应该是可以,刚才起来refecter看一下微软怎么写的,可是我refect ComboBox之后看不到DataSource属性呀,你们可以看到吗,麻烦谁要看到了发上来看下
      

  7.   

    [AttributeProvider(typeof(IListSource)), DefaultValue((string)null), SRDescription("ListControlDataSourceDescr"), RefreshProperties(RefreshProperties.Repaint), SRCategory("CatData")]
    public object DataSource
    {
        get
        {
            return this.dataSource;
        }
        set
        {
            if (((value != null) && !(value is IList)) && !(value is IListSource))
            {
                throw new ArgumentException(SR.GetString("BadDataSourceForComplexBinding"));
            }
            if (this.dataSource != value)
            {
                try
                {
                    this.SetDataConnection(value, this.displayMember, false);
                }
                catch
                {
                    this.DisplayMember = "";
                }
                if (value == null)
                {
                    this.DisplayMember = "";
                }
            }
        }
    }
      

  8.   

    DataSource 是在ComboBox的父类ListControl中实现的
      

  9.   

    看参数类型是:
    GetGenericArguments方法。
    看是不是泛型, 是看IsGenericType属性。