2017-04-18 51 views
1

我想我的有序int数组转换成多头排列, 这是我的我的转换目前的样子:如何将int数组转换为C#中的长数组?

long[] arraylong = new long[array.Length]; 

我的问题出现时,我想将此计算:

longmid = lowlong + ((searchValueLong - arraylong[lowlong]) * (highlong - lowlong)) 
    /(arraylong[highlong] - arraylong[lowlong]); 

,我得到一个类型为DivideByZeroException的例外。 ,转换后的零值是arraylong[lowlong]arraylong[highlong]

预先感谢您为您可以给任何帮助。

+5

这不是一个转换,你只是创建一个全长为零的数组。 – DavidG

回答

5

要转换int[]使用linqs Select并在其显式转换为long

int[] ints = new int[] { 1, 2, 3, 4 }; 
var longs = ints.Select(item => (long)item).ToArray(); 

在你上面的代码你只初始化一个long[]int[]的规模和项目得到默认值 - 这对于long是零 - 导致您DivideByZeroException


注意,使用ints.Cast<long>().ToArray();将不工作,并抛出一个InvalidCastException: Specified cast is not valid。 (即所有零)

3

这不是一个转换,你只是创建相同长度的所有默认值的数组有多种方法可以将数组转换,一种是使用LINQ的Select方法:

long[] arrayLong = array.Select(i => (long)i).ToArray();