ContainsKey返回单位而不是bool?

Ant*_*ell 3 f#

以下代码抛出编译时错误对我来说很奇怪.我不确定为什么ContainsKey会返回单位.该文件说,它返回布尔.

open System.Collections.Generic    

let mydict = new Dictionary<string,'a>()

if(mydict.ContainsKey "mykey") then
    mydict.["mykey"] = newkey
Run Code Online (Sandbox Code Playgroud)

错误FS0001:此表达式应该具有类型'bool',但这里有类型'unit'

我在这里错过了什么吗?

Lee*_*Lee 6

if是一个表达式,因此两个分支必须具有相同的类型.如果else未指定分支,unit则插入空类型.这意味着您的then分支也必须具有类型unit.但是mydict.["mykey"] = newkey有类型bool.如果要为mykey您插入新值,则应使用<-而不是=:

if(mydict.ContainsKey "mykey") then
    mydict.["mykey"] <- newkey
Run Code Online (Sandbox Code Playgroud)