JSON到C#:将双打的arraylist转换为int的数组?

时间:2010-01-20 18:36:38

标签: c# arraylist double int

我有一个由JSON库返回的双打的arraylist。在运行JSON解析器的decode方法之后,我们在C#locals窗口中有这个:

Name     Value           Type
myObj    Count=4         object {System.Collections.ArrayList}
[0]      100.0           object {double}
[1]      244.0           object {double}
[2]      123.0           object {double}
[3]      999.0           object {double}

我的目标是从这个ArrayList生成一个整数数组。迭代并一次执行这一个值很简单,但我想知道如何使用内置转换器功能。我一直在阅读ConvertAll上的theads但我无法让它工作。

我无法控制JSON库,所以我必须从ArrayList开始。

由于

5 个答案:

答案 0 :(得分:2)

的LINQ:

var array = (from double d in list
             select (int)d).ToArray();

答案 1 :(得分:1)

我会想到这样的东西(带转换器):

    private void Main()
    {
        List<Double> lstd = new List<Double>();

        lstd.Add(100.0);
        lstd.Add(244.0);
        lstd.Add(123.0);
        lstd.Add(999.0);

        List<int> lsti = lstd.ConvertAll(new Converter<double, int>(DoubleToInt));

    }


    public static int DoubleToInt(double dbl)
    {
        return (int)dbl;
    }

答案 2 :(得分:1)

由于拳击,你需要小心ArrayList s。因此:

// list is ArrayList      
int[] array = Array.ConvertAll(list.ToArray(), o => (int)(double)o);

注意演员表框架为(int)(double)。首先将装箱的double取消装箱,然后转换为int

在旧版本的.NET中执行此操作

// list is ArrayList
int[] array = Array.ConvertAll(
    list.ToArray(),
    delegate(object o) { return (int)(double)o; }
);

另一种选择是

// list is ArrayList
int[] array = Array.ConvertAll(
    (double[])list.ToArray(typeof(double)),
    o => (int)o
);

此处我们不需要取消装箱操作,因为我们首先将ArrayList转换为未装箱的double数组。

在旧版本的.NET中执行此操作

// list is ArrayList
int[] array = Array.ConvertAll(
    (double[])list.ToArray(typeof(double)),
    delegate(double o) { return (int)o; }
);

答案 3 :(得分:0)

如果您想使用ConvertAll获取工作解决方案的示例,请参阅此处的快速摘录。

 public static void testCOnvertAll()
        {
            List<double> target = new List<double>();
            target.Add(2.3);
            target.Add(2.4);
            target.Add(3.2);

            List<int> result = target.ConvertAll<int>(new Converter<double, int>(DoubleToInt));

        }

        public static int DoubleToInt(double toConvert)
        {
            return Convert.ToInt32(toConvert);
        }

答案 4 :(得分:0)

linq选项更清晰,但如果你没有linq。

//Assuming someValues is your input array and you're sure you don't need to check the types
int[] outputValues = new int[someValues.Count];
for (int i = 0; i < someValues.Count; i++)
   outputValues[i] = (int)someValues[i];