リテラルを使用して空の Guid を一致させようとしていますが、ここで何が起こっているのかわかりません。
let [<Literal>] EmptyGuid = System.Guid ()
let someFunction () = System.Guid.NewGuid () |> Some
match someFunction () with
| None -> printfn "None"
| Some EmptyGuid -> printfn "Some EmptyGuid"
// ^ Comment this line out and it works!
| Some guid -> guid.ToString "D" |> printfn "Some Guid: %s"
上記のプログラムを実行しようとすると、ランダムに 2 つの異なる例外が発生します。
AccessViolationException が処理されませんでした: 保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
または:
InvalidProgramException が処理されませんでした: 共通言語ランタイムが無効なプログラムを検出しました。
これは私のせいではありませんよね?私は信じられないほど愚かなのか、それとも本当に奇妙なことが起こっているのか...
編集:
どの例外がいつ表示されるかに気付きました:
- .NET 4.5 使用時の AccessViolationException
- .NET 4 使用時の InvalidProgramException