我有一个由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开始。
由于
答案 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];