2017-01-12 77 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讀者可以理解錯誤。 –

相關問題