F#の配列(Array)を辞書(Dictionary)のキーにしちゃいかん!!代わりにタプル(tuple)を使おう
すごいハマった。
let dic = new System.Collections.Generic.Dictionary<int option [], string>() dic.[[|Some 1; Some 1|]] <- "A" dic.[[|Some 1; Some 2|]] <- "B" dic.[[|Some 1; Some 3|]] <- "C"
というコードをを実行しても
System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。 場所 System.Collections.Generic.Dictionary`2.get_Item(TKey key) 場所 <StartupCode$FSI_0141>.$FSI_0141.main@() エラーのため停止しました
となって死ぬ。多分、キーとして値丸コピーしてるんじゃなくて、アドレスだけメモってるんだろうな。代わりにtuple使っとけってことっぽい。こっちはちゃんと取れる。
let dic = new System.Collections.Generic.Dictionary<(int option*int option), string>() dic.[(Some 1, Some 1)] <- "A" dic.[(Some 1, Some 2)] <- "B" dic.[(Some 1, Some 3)] <- "C" dic.[(Some 1, Some 3)]