JSON到C#:将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 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开始 谢谢林克: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
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,我也感谢所有回复显示了各种转换方法的其他人。