2017-01-12 137 views
1

MSDN说,从ulongdouble的转换可以隐式完成:https://msdn.microsoft.com/en-us/library/y5b434w4.aspx。但是,当我尝试编译如下:无法从ulong []转换为double []

public static double arraySum(double[] arrN) 
{ 
    double sum = 0; 
    foreach (double k in arrN) 
    sum += k; 
    return sum; 
} 

ulong[] chessArray = new ulong[64] 
//filling values of chessArray, 1st element is 1, 2nd is 2, 3rd is 4 etc.  
ulong a = arraySum(chessArray); 

我得到一个编译器错误CS1503“无法从ULONG []转换为加倍[]”。什么原因?我的猜测是,在这种特殊情况下,最后一个数组元素的值非常高,即chessArray [63]甚至更高(1),然后最大值为ulong:18,446,744,073,709,551,615。

+0

MSDN说你可以隐式转换'ulong'到'double'。不是'ulong []'''double []''。 –

+0

仅仅因为存在从某种类型“T”到“U”的隐式转换,并不意味着存在从“T”数组到“U”数组的隐式转换,即隐式转换不会自动提升到数组类型。 – Lee

+0

但是你正在做一个双倍的时间。这可以工作:ulong a =(ulong)chessArray.Select(x =>(double)x).Sum(); – jdweng

回答

2

您正尝试将ulong的数组转换为double的数组,这是不可能的。

尝试每个值转换你的方法里面,而不是:

public static double arraySum(ulong[] arrN) 
{ 
    double sum = 0; 
    foreach (ulong k in arrN){ 
     sum+=(double)k; 
    } 
    return sum; 
} 

ulong[] chessArray = new ulong[64] 
//filling values of chessArray, 1st element is 1, 2nd is 2, 3rd is 4 etc.  
ulong a = arraySum(chessArray); 
+0

在我看来这是最好的答案。 –

0

您可以从ULONG转换成一倍,但你不能从双转换成ULONG。当您尝试转换数组时,后面的转换也必须是可能的,因为数组是可写的。

只要看看这说明了问题后果的例子:

ulong[] chessArray = new ulong[64]; 
double[] doubleArray = chessArray; // let's assume it is allowed 
doubleArray[0] = 1.23; // what should happen here with chessArray[0]? 
+0

请改写更多的灵活性,想法是100%OK,但平均SO读者可以理解错误。 –

相关问题