原贴:http://topic.csdn.net/u/20090819/20/3b361421-0ada-4372-a983-13e5f81ca5fd.html
---------------------using System.Data;
using System.Web;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System;
using System.Reflection;namespace AutoCode.Core.Home
{
    public class Index : TemplateBase
    {
        public override string ToString()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("姓名", typeof(string));
            dt.Columns.Add("学号", typeof(string));
            dt.Rows.Add(new object[] { "小张", "0001" });
            dt.Rows.Add(new object[] { "小王", "0002" });
            dt.Rows.Add(new object[] { "小李", "0003" });
            //DataTable输出
            GetHtml(dt);            Dictionary<string, string> dct = new Dictionary<string, string>();
            dct.Add("小张", "0001");
            dct.Add("小王", "0002");
            dct.Add("小李", "0003");
            //Dictionary<>输出
            GetHtml(dct);            List<Studen> list = new List<Studen>();
            list.Add(new Studen() { Name = "小张", Number = "0001" });
            list.Add(new Studen() { Name = "小王", Number = "0002" });
            list.Add(new Studen() { Name = "小李", Number = "0003" });
            //List<>输出
            GetHtml(list);            ArrayList alist = new ArrayList();
            alist.Add(new Studen() { Name = "小张", Number = "0001" });
            alist.Add(new Studen() { Name = "小王", Number = "0002" });
            alist.Add(new Studen() { Name = "小李", Number = "0003" });
            //ArrayList输出
            GetHtml(alist);            return st.GetString();
        }        public string GetHtml(object itemList)
        {
            string html = "";
            if (itemList is IEnumerable)
            {
                IEnumerable eb = itemList as IEnumerable;
                if (eb != null)
                {
                    System.Collections.IEnumerator er = eb.GetEnumerator();
                    while (er.MoveNext())
                    {
                        Type t = er.Current.GetType();
                        PropertyInfo[] properties = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
                        PropertyInfo pi = properties[0];
                        //foreach (PropertyInfo pi in properties)
                        //{                        //}
                        html += pi.GetValue(er.Current, null).ToString();
                    }
                }
            }
            else if (itemList is IListSource)
            {
                IList list = ((IListSource)itemList).GetList();
                for (int i = 0; i <= list.Count - 1; i++)
                {
                    System.Data.DataRowView drv = (System.Data.DataRowView)list[i];
                    html += drv[0].ToString();
                }
            }
            else
            {
                html = "3";
            }
            //????? 这里要怎么写才能让不管传入 DataTable Dictionary<>  List<>  ArrayList 这些数据类型都能输出
            //<ul><li>小张(0001)</li><li>小王(0002)</li><li>小李(0003)</li></ul>
            return html;        }    }    public class Studen
    {
        public string Name { get; set; }
        public string Number { get; set; }
    }
}
上面是我的处理,
那么是不是要这样子来做呢
还是有更好的方法

解决方案 »

  1.   

    兄弟你够执着的哦但是暴露你对.Net 集合类接口理解的缺乏.虽然我也同样缺乏你可以先试试去搞懂几个接口的区别与联系,相必你能解决你的问题但是呢,我可以告诉你,求大求全,往往的结果不好.你可以先把传进来的数据分类,对每一类进行一个良好的处理,这个按字面来说,叫抽像..
      

  2.   

    对了,你如果有学习wpf的话,里面的很多表现形式都是
    control.Content = Object
    形式,但是,它的文档中也说的很清楚了,Content能处理的几种类型,
    建议你可以看一下
      

  3.   

    1.是都转换成统一的类型比如ArrayList在方法中统一用ArrayList来处理..
    2.就是像你那样在方法中根据传入参数,判断类型
    3.做一个范型接口..再分别针对 DataTable,Dictionary<>,List<>,ArrayList这几种做对应的实现
      

  4.   


    //实体类
     public class Studen
        {
            string _Name = "";
            string _Number = "";
            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
            public string Number
            {
                get { return _Number; }
                set { _Number = value; }
            }
        }//统一操作接口
        public interface IStudentDo<T>
        {
            string GetHtml(T t);
        }
        //处理传入DataTable的情况
        public class DataTableDo:IStudentDo<DataTable>
        {        #region IStudentDo<DataTable> 成员        public string GetHtml(DataTable t)
            {
                return "DataTable处理";
            }        #endregion
        }
        //处理传入Dictionary的情况
        public class DictionaryDo : IStudentDo<Dictionary<string, string>>
        {        #region IStudentDo<Dictionary<string,string>> 成员        public string GetHtml(Dictionary<string, string> t)
            {
                return "Dictionary<>处理";
            }        #endregion
        }
        //处理传入List的情况
        public class ListDo : IStudentDo<List<Studen>>
        {        #region IStudentDo<List<Studen>> 成员        public string GetHtml(List<Studen> t)
            {
                return "List<>处理";
            }        #endregion
        }
        //处理传入 ArrayList的情况
        public class ArrayListDo : IStudentDo<ArrayList>
        {        #region IStudentDo<ArrayList> 成员        public string GetHtml(ArrayList t)
            {
                return "ArrayList处理";
            }        #endregion
        }    public class Test
        {
            public void TestMethod()
            {
                string strRev = "";
                DataTable dt = new DataTable();
                dt.Columns.Add("姓名", typeof(string));
                dt.Columns.Add("学号", typeof(string));
                dt.Rows.Add(new object[] { "小张", "0001" });
                dt.Rows.Add(new object[] { "小王", "0002" });
                dt.Rows.Add(new object[] { "小李", "0003" });
                //DataTable输出
                strRev = new DataTableDo().GetHtml(dt);            Dictionary<string, string> dct = new Dictionary<string, string>();
                dct.Add("小张", "0001");
                dct.Add("小王", "0002");
                dct.Add("小李", "0003");
                //Dictionary<>输出
                strRev = new DictionaryDo().GetHtml(dct);            List<Studen> list = new List<Studen>();
                Studen s0 = new Studen();
                s0.Name = "小张";
                s0.Number = "0001";
                list.Add(s0);
                Studen s1 = new Studen();
                s1.Name = "小王";
                s1.Number = "0002";
                list.Add(s1);
                Studen s2 = new Studen();
                s2.Name = "小李";
                s2.Number = "0003";
                list.Add(s2);
                //List<>输出
                strRev = new ListDo().GetHtml(list);            ArrayList alist = new ArrayList();
                Studen s00 = new Studen();
                s00.Name= "小张";
                s00.Number= "0001";
                alist.Add(s00);
                Studen s01 = new Studen();
                s01.Name= "小王";
                s01.Number= "0002";
                alist.Add(s01);
                Studen s02 = new Studen();
                s02.Name= "小李";
                s02.Number= "0003";
                alist.Add(s02);
                //ArrayList输出
                strRev = new ArrayListDo().GetHtml(alist);        }
        }