2017-01-12 12 views
1

MSDNによれば、ulongからdoubleへの変換は暗黙のうちに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

Plsはより多くのexlipcityを書き換え、アイデアは100%OKですが、平均的なSOリーダーは間違って理解することができます。 –

関連する問題