2014-07-07 74 views
0

我對c#和使用Mathnet庫都很陌生,因此我有以下代碼,BasicCandidate是一個具有名爲GetCScores()的函數的類,它返回Dictionary< string, double>classMeans只是Vector<double>foreach語句不能對類型爲'double'的變量操作

foreach (BasicCandidate bc in data) { 
    int i = 0; 

    foreach (KeyValuePair<string, double> score in bc.GetCScores()) { 

     classMeans[bc.GetClassNumber()][++i] += score.Value; 
    } 
} 

數組在第二foreach聲明我得到一個錯誤,說:

foreach statement cannot operate on variables of type double...

我環顧四周在線和一些人指出,出現這種情況時,正在修改字典,這是不允許的。但正如你所看到的,我沒有那樣做。任何人都可以提出解決方案,並解釋爲什麼我得到這個錯誤?

+0

如果'bc.GetCScores'確實返回了'Dictionary '你的代碼就沒事了,所以它不太可能。此消息絕不涉及在枚舉它時修改字典。你可以在你的問題中包含'GetCScores'的代碼嗎? –

+0

向我們展示函數'GetCScores',至少是函數頭。 – DavidG

+0

'public Dictionary GetScores();' –

回答

3

看來GetCScores實際上是返回一個double,不執行有GetEnumerator方法,這是需要foreach(該方法的最可能的來源是實現IEnumerable東西)。

看起來好像該方法沒有返回Dictionary<string, double>或者存在某些代碼缺失,從而進一步解釋問題。

當迭代的集合本身在迭代期間被修改時,您會聽到有關被修改的基礎集合的建議。從你發佈的代碼看來,你並沒有這樣做。

+2

'foreach'不需要'IEnumerable'的實現,它只需要對象的類型具有'GetEnumerator'方法。 – dcastro

+0

@dcastro我會修改,謝謝。儘管我應該記住這一點,但編譯器也會與其他項目一起玩這個技巧。 –

相關問題