大家好,我现在有这样一个需求,我有个集合,集合内会添加多种多种数据类型的对象,如int 、double、List<int>、List<string>、List<string[]>等,这里所举的类型只是一部分,我向大家请教两个问题,第一个问题,这个集合的类型如何定义,采用List<object>吗?还是ArrayList,还是说有更好的类型?第二个问题,如果集合采用List<object>或ArrayList,那么内部的对象类型就是object,我获取到object对象后,如何将其转换为正确的数据类型,因为我要对对象进行操作,这个对象类型转换过程,我不想先判断对象类型是什么,然后再对其进行转换,是否有更好的通用转换方法。

解决方案 »

  1.   

    第一个问题,这个集合的类型如何定义,采用List<object>吗?还是ArrayList,还是说有更好的类型?
    ->个人认为List<object> ,不过都会发生装箱,拆箱操作。
    第二个问题,如果集合采用List<object>或ArrayList,那么内部的对象类型就是object,我获取到object对象后,如何将其转换为正确的数据类型,
    ->用对象的gettype方法获取类型名称,通过各种parse方法转换。
      

  2.   

    个人认为List比ArrayList好
    采用泛型T 不用object 泛型是类型安全的且性能更好,这也是选择List不选择ArrayList的原因
      

  3.   

    主要代码如下: TempValue存放的值可能是多种类型,如帖子中所列,我通过GetRealResult只能获取到object类型的值,但是这些值有肯能是int、double  list<double> list<double[]>等,我要对不同的
            public  Dictionary<string, object> TempValue
            {
                get { return _tempValue; }
                set { _tempValue = value; }
            }
            private object GetRealResult(string result)
            {
                object ovalue;
                if (_tempValue.TryGetValue(result, out ovalue))
                {
                    return ovalue;
                }
                else
                {
                    return result;
                }
            }
    假设我知道GetRealResult("a")返回的object对象是数组,我想获取到数组中第一个值,我希望通过Object[] n=GetRealResult("a")或者Object[] n=GetRealResult("a") as double[]将GetRealResult结果转为数组,然后再 获取第一个值,但这些代码都是通不过的。那么我如何获取到数组中第一个值呢,前提是我只知道是数组,不知道是int[]还是double[]或者string[]。我不想先判断是什么类型的数组,然后再对应进行转换。
      

  4.   

    这样行不?Dictionary<string, Tuple<Type, dynamic>> TempValue;或者Dictionary<string, Tuple<Type, object>> TempValue;