【问题标题】:foreach statement cannot operate on variables of type 'double'foreach 语句不能对“double”类型的变量进行操作
【发布时间】:2014-07-07 12:34:24
【问题描述】:

我是 c# 和 Mathnet 库的新手,所以我有以下代码,BasicCandidate 是一个类,它有一个名为 GetCScores() 的函数,它返回一个 Dictionary< string, double>classMeans只是Vector<double>的数组

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

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

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

在第二个foreachstatement 中,我收到一条错误消息:

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

我在网上看了一圈,有人指出这是在修改字典时发生的,这是不允许的。但正如你所见,我不会那样做。谁能提出解决方案并解释为什么我会收到此错误?

【问题讨论】:

  • 如果bc.GetCScores 真的返回了Dictionary&lt; string, double&gt;,你的代码就可以了,所以它不太可能。此消息与在枚举字典时修改字典无关。您能否在问题中包含GetCScores 的代码?
  • 向我们展示函数GetCScores,至少是函数头。
  • public Dictionary&lt;string, double&gt; GetScores();
  • @MrX 你给了我们GetScores,而不是GetCScores,你只是在这里调用了错误的函数吗?

标签: c# dictionary foreach


【解决方案1】:

看起来GetCScores 实际上返回了一个double,它没有实现GetEnumerator 方法,而foreach 需要该方法(该方法最可能的来源是实现IEnumerable)。

似乎该方法没有返回Dictionary&lt;string, double&gt;,或者问题中缺少一些代码来进一步解释问题。

当正在迭代的集合本身在迭代期间被修改时,您听到的关于正在修改的基础集合的建议。从您发布的代码看来,您没有这样做。

【讨论】:

  • foreach 不需要实现IEnumerable,它只要求对象的类型有GetEnumerator 方法。
  • @dcastro 我会修改的,谢谢。虽然我应该记住这一点,但编译器也会对其他项目玩这个把戏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多