2016-11-06 76 views
1

我無法將值設置爲像C#中的arr[4.2]=11;這樣的數組中的浮點索引。我也用索引器。如何在數組中設置浮點索引的值

double[] arr=new double[10]; 

public double this[double index] 
{  
    get 
    { 
     if (index > 0 && index <=10) 
     {  
      return arr[index]; //here is error 
     } 
     else 
     { 
      return 0; 
     } 
    } 
    set 
    { 
     if (index > 0 && index <=10) 
     { 
      arr[index] = value; //here is error 
     } 
     else 
     { 
      Console.WriteLine("can not set value"); 
     } 
    } 
} 

有一個錯誤,

無法隱式轉換類型 '雙' 到 '廉政'

arr[index]

我怎樣才能在指標設置值一樣arr[1.5]=10;arr[2.4]=20;arr[0.2]=30;

回答

0

你不能索引到由非整數數組。你會更好地使用字典。

浮點數通常會造成可怕的索引,因爲它不僅可能,而且確實非常普遍,因爲兩個相似的浮點數比較不平等。

例如,在大多數環境中(1/3和1-(2/3)將給出兩種截然不同的結果。

0

您可以使用Dictionary<double, int>

var data = new Dictionary<double, int>(); 
data[1.5] = 10; 
data[2.4] = 20; 
data[0.2] = 30; 

注意浮點比較如果你想解決這個問題,你可以使用decimal

+0

只是爲了確認 - 你明白這是不實際的建議,因爲它只適用於恆定浮動值? –

0

你可以永遠不會索引爲非整數,只是想象如果我會說你給我從數組的第1.57個元素,它沒有任何意義如果你想索引爲十進制imal或float可以使用其他數據類型(如Dictionary或HashTable),但在比較密鑰時要注意精度。