所以我对F#有点新,但我有C#的背景。我正在编写一个迭代Dictionary<string, int>
的代码,为每个元素添加1,如果该值超过100,则将一个元素添加到列表中。这是我的代码:
//Early on in the code
let variables = new Dictionary<string, int>()
let variablecnt = new Dictionary<string, int>()
let trash = new List<int>()
//Later on in the code at a higher encapsulation level
for KeyValue(j, k) in variablecnt do
variablecnt.[j] <- k+1
if variablecnt.[j]=100 then
trash.Add(0)
variables.Remove(j) |> ignore
当它运行时,我得到以下异常:
System.InvalidOperationException was unhandled
Message: An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll
Additional information: Collection was modified; enumeration operation may not execute.
它给出的行号对应于:
variablecnt.[j] <- k+1
我理解它在说什么,但我怎么能做我想做的事情呢?我花了很多时间试图解决这个问题并研究答案,但我没有发现任何有用的东西(F#没有像C#这样的语言那么多的资源)。我已尝试将mutable
关键字添加到let
语句中,但这不会改变任何内容。
另外,我使用System.Collections.Generic.Dictionary&lt;&gt;字典而不是F#dict(),因为我想我更熟悉.NET类。同样的原因我经常使用Console.WriteLine而不是printf(抱歉!)