请教C#中通过反射获得泛型集合中所有值的问题。

//mainList用于存放多个集合或数组List<object>mainList=newList<object>();//加入mainList的第一个元素为List<i... //mainList用于存放多个集合或数组
List<object> mainList = new List<object>();

//加入mainList的第一个元素为List<int>类型
List<int> intlist = new List<int>() ;
intlist.Add(1);
intlist.Add(2);
intlist.Add(3);
//加入mainList的第二个元素为List<string>类型
List<string> stringList = new List<string>();
stringList.Add("1");
stringList.Add("2");
stringList.Add("3");

//加入mainList的第三个元素为double型的数组
double[] floatArr = { 1.1, 1.2, 1.3 };

//最后加入的是字典
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("Key1", 1);
dict.Add("Key2", 2);
dict.Add("Key3", 3);

mainList.Add(intlist);
mainList.Add(stringList);
mainList.Add(floatArr);
mainList.Add(dict);
foreach (object obj in mainList)
{
//如何将mainList中所有的值都读出来
}
Console.Read();
展开
 我来答
jimmy14888888
2015-07-21 · TA获得超过1340个赞
知道小有建树答主
回答量:550
采纳率:80%
帮助的人:357万
展开全部

首先来个不安全的,但是短的版本:

foreach (object obj in mainList)
{
    dynamic x = obj;
    foreach (var item in x)
    {
        Console.Write(item);
    }
}

因为这些类型没有公共的接口(object不算),所以比较安全的方式是用if else处理了,用Type就够了。

foreach (object obj in mainList)
{
    Type objType = obj.GetType();
    if (objType == typeof(List<int>))
    {
        List<int> o = obj as List<int>;
        foreach (var i in o)
            Console.Write(i);
    }
    else if (objType == typeof(List<string>))
    {
        List<string> o = obj as List<string>;
        foreach (var s in o)
            Console.Write(s);
    }
    else if (objType == typeof(double[]))
    {
        double[] o = obj as double[];
        foreach (var d in o)
            Console.Write(d);
    }
    else if (objType == typeof(Dictionary<string, int>))
    {
        Dictionary<string, int> o = obj as Dictionary<string, int>;
        foreach (var p in o)
            Console.Write(p);
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式