JSON到C#:将double数组列表转换为int数组?

JSON到C#:将double数组列表转换为int数组?,c#,arraylist,double,int,C#,Arraylist,Double,Int,我有一个JSON库返回的double数组列表。在JSON解析器的解码方法运行之后,我们在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

我有一个JSON库返回的double数组列表。在JSON解析器的解码方法运行之后,我们在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} 名称值类型 myObj Count=4对象{System.Collections.ArrayList} [0]100.0对象{double} [1] 244.0对象{double} [2] 123.0对象{double} [3] 999.0对象{double}

我的目标是从这个数组列表生成一个整数数组。一次迭代并执行一个值很简单,但我想知道如何使用内置的转换器功能来执行。我一直在看ConvertAll上的电影,但我无法让它发挥作用

我无法控制JSON库,因此必须从ArrayList开始

谢谢

林克:

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


我会这样想(使用转换器):

private void Main()
{
List lstd=新列表();
增加(100.0);
第1部分增补(244.0);
lstd.增补(123.0);
补充资料(999.0);
列表lsti=lstd.ConvertAll(新转换器(DoubleToInt));
}
公共静态int-DoubleToInt(双dbl)
{
返回(int)dbl;
}

我会这样想(带转换器):

private void Main()
{
List lstd=新列表();
增加(100.0);
第1部分增补(244.0);
lstd.增补(123.0);
补充资料(999.0);
列表lsti=lstd.ConvertAll(新转换器(DoubleToInt));
}
公共静态int-DoubleToInt(双dbl)
{
返回(int)dbl;
}

如果您想要使用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);
        }
publicstaticvoidtestconvertall()
{
列表目标=新列表();
目标.增加(2.3);
目标.增加(2.4);
目标.增加(3.2);
列表结果=target.ConvertAll(新转换器(DoubleToInt));
}
公共静态int-DoubleToInt(双转换)
{
返回Convert.ToInt32(toConvert);
}

如果您想要使用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);
        }
publicstaticvoidtestconvertall()
{
列表目标=新列表();
目标.增加(2.3);
目标.增加(2.4);
目标.增加(3.2);
列表结果=target.ConvertAll(新转换器(DoubleToInt));
}
公共静态int-DoubleToInt(双转换)
{
返回Convert.ToInt32(toConvert);
}

由于装箱,您需要小心使用
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)),
    delegate(double o) { return (int)o; }
);
另一种选择是

// list is ArrayList
int[] array = Array.ConvertAll(
    (double[])list.ToArray(typeof(double)),
    o => (int)o
);
在这里,我们不需要取消装箱操作,因为我们首先将
ArrayList
转换为未装箱的
double
s数组

在旧版本的.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)),
    delegate(double o) { return (int)o; }
);

由于装箱,您需要小心使用
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)),
    delegate(double o) { return (int)o; }
);
另一种选择是

// list is ArrayList
int[] array = Array.ConvertAll(
    (double[])list.ToArray(typeof(double)),
    o => (int)o
);
在这里,我们不需要取消装箱操作,因为我们首先将
ArrayList
转换为未装箱的
double
s数组

在旧版本的.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)),
    delegate(double o) { return (int)o; }
);

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];
//假设someValues是您的输入数组,并且您确定不需要检查类型
int[]outputValues=新的int[someValues.Count];
for(int i=0;i
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];
//假设someValues是您的输入数组,并且您确定不需要检查类型
int[]outputValues=新的int[someValues.Count];
for(int i=0;i
Jason感谢您的拳击警告。我对C#很陌生。“=>”运算符是什么?VS2005拒绝使用“无效表达式项”。
=>
是lambda运算符,
o=>(int)(double)o
是lambda表达式的示例。它基本上是一个非常特殊的匿名代表。这是C#3.5中添加的一项功能。我将编辑我的帖子,向您展示如何在Visual Studio 2005中执行上述操作。再次感谢您的解释,Jason,我也感谢所有回复的人,他们展示了执行此转换的各种方法。Jason感谢拳击警告。我对C#很陌生。“=>”运算符是什么?VS2005拒绝使用“无效表达式项”。
=>
是lambda运算符,
o=>(int)(double)o
是lambda表达式的示例。它基本上是一个非常特殊的匿名代表。这是C#3.5中添加的一项功能。我将编辑我的帖子,向您展示如何在Visual Studio 2005中执行上述操作。再次感谢您的解释,Jason,我也感谢所有回复显示了各种转换方法的其他人。