private void Filldt(TreeList t)
        {
            dt.Clear();
            foreach (TreeListColumn tc in t.Columns)
            {
                dt.Rows.Add(tc.Caption, tc.FieldName);
            }
            ComSetField.EditValue = null;
        }
        private void Filldt(GridView t)
        {
            dt.Clear();
            foreach (GridColumn tc in t.Columns)
            {
                dt.Rows.Add(tc.Caption, tc.FieldName);
            }
            ComSetField.EditValue = null;
        }
以上能不能使用1个泛型方法实现以功能

解决方案 »

  1.   

    可以啊,不过我觉得 需要把TreeList 重写成泛型方式的类。
      

  2.   

    如果TreeListColumn和GridColumn有共同的基类的话可以用ienumerable<T>,以columns作参数
      

  3.   

    如果是net4.0 问题不大使用dynamic可以统一到一个方法里net4以下,TreeList,GridView 不见得继承有相同的接口,所以要么反射,那么is判定,这样的结果也未必就显的更好
      

  4.   

    方法是void filldt<T>(ienumerable<T> columns) where T : 某基类(包含Caption和FieldName属性)
      

  5.   

    如果是net4.0以下可以考虑泛型 和委托private void Filldt<T1,T2>(T1 t,func<T1,T2> listfun,func<T2,string> Capitonfun,func<T2,string> FieldNamefun)
    {
       dt.Clear();
     foreach (T2 tc in listfun(t))
      {
      dt.Rows.Add(Capitonfun(tc), FieldNamefun(tc));
      }
      ComSetField.EditValue = null;}调用 Filldt(TreeListObj,p=>p.Columns,c=>c.Caption,c=>c.FieldName);
    net4的话没这么麻烦,动态类型一次就成(不过使用动态类型,调用安全上就自己保证了)
      

  6.   

    谢谢wanghui0380,让我有新的一个认识,结贴