none
泛类的集合 RRS feed

答案

  • 一个集合中,要包含很多种类,比如(class1,class2,TextBox, TextBlock),该怎么实现?

    你确定这些类的个数以及类型,用Turple即可;否则建议最好弄一个抽象类,然后其余的类全部继承它使用,不然你还要知道某个存入object的对象究竟是什么,还要强制转换呢!

     class MainTest
        {
            static void Main()
            {
                Tuple<string,int,double> t = Tuple.Create<string, int, double>("a", 1, 1.0);
                //t.Item1;……
    
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月6日 1:59
    版主
  • 你把string啥的替换成你的抽象类型呗,实例化的时候用继承此抽象类的实际类替换。

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月6日 7:48
    版主
  • public class Collection
    {
        Dictionary<Type, object> collection = new Dictionary<Type, object>();
        public void AddClass<T>(T obj) where T : class
        {
            List<T> list = new List<T>();
            Type type = typeof(T);
            if (collection.ContainsKey(type))
            {
                list = collection[type] as List<T>;
                list.Add(obj);
                collection.Remove(type);
                collection.Add(type, list);
            }
            else
            {
                list.Add(obj);
                collection.Add(type, list);
            }
        }
        public List<T> GetClass<T>() where T : class
        {
            List<T> list = null;
            Type type = typeof(T);
            if (collection.ContainsKey(type))
            {
                list = collection[type] as List<T>;
            }
            return list;
        }
    }
    static void Main()
    {
        Collection collection = new Collection();
        Form f1 = new Form();
        Form f2 = new Form();
        collection.AddClass<Form>(f1);
        collection.AddClass<Form>(f2);
        string s1 = "123";
        string s2 = "456";
        collection.AddClass<string>(s1);
        collection.AddClass<string>(s2);
        List<Form> FormLst = collection.GetClass<Form>();
        List<string> stringLst = collection.GetClass<string>();
    }
    可以自定义集合类
    2012年9月6日 9:49

全部回复

  • 可以使用hashtable/字典,List<Object>等,都可以,主要看你的需求。
    2012年9月6日 1:02
  • 一个集合中,要包含很多种类,比如(class1,class2,TextBox, TextBlock),该怎么实现?

    你确定这些类的个数以及类型,用Turple即可;否则建议最好弄一个抽象类,然后其余的类全部继承它使用,不然你还要知道某个存入object的对象究竟是什么,还要强制转换呢!

     class MainTest
        {
            static void Main()
            {
                Tuple<string,int,double> t = Tuple.Create<string, int, double>("a", 1, 1.0);
                //t.Item1;……
    
            }
        }

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月6日 1:59
    版主
  • 谢谢您!那如果抽象类要怎么弄?
    2012年9月6日 7:29
  • 你把string啥的替换成你的抽象类型呗,实例化的时候用继承此抽象类的实际类替换。

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月6日 7:48
    版主
  • public class Collection
    {
        Dictionary<Type, object> collection = new Dictionary<Type, object>();
        public void AddClass<T>(T obj) where T : class
        {
            List<T> list = new List<T>();
            Type type = typeof(T);
            if (collection.ContainsKey(type))
            {
                list = collection[type] as List<T>;
                list.Add(obj);
                collection.Remove(type);
                collection.Add(type, list);
            }
            else
            {
                list.Add(obj);
                collection.Add(type, list);
            }
        }
        public List<T> GetClass<T>() where T : class
        {
            List<T> list = null;
            Type type = typeof(T);
            if (collection.ContainsKey(type))
            {
                list = collection[type] as List<T>;
            }
            return list;
        }
    }
    static void Main()
    {
        Collection collection = new Collection();
        Form f1 = new Form();
        Form f2 = new Form();
        collection.AddClass<Form>(f1);
        collection.AddClass<Form>(f2);
        string s1 = "123";
        string s2 = "456";
        collection.AddClass<string>(s1);
        collection.AddClass<string>(s2);
        List<Form> FormLst = collection.GetClass<Form>();
        List<string> stringLst = collection.GetClass<string>();
    }
    可以自定义集合类
    2012年9月6日 9:49