F#这个表达式应该有' unit',但是有类型' bool'

时间:2014-06-29 19:30:20

标签: f# unit-type

我有以下代码

if somecondition then
  myobj.Property1 = match myobj.Property1 with
                       | null -> SomePropertyType ()
                       | p -> p

我想要做的是查看myobj.Property1是否为null,如果不是,则单独保留,否则创建SomePropertyType类型的新对象并分配它。

问题是,我得到了一个

This expression should have type 'unit', but has type 'bool'

我应该怎么做如果我必须在if下放置多个myobj.Property1 ......语句?

1 个答案:

答案 0 :(得分:10)

您正在比较两个值(使用=),因此返回类型将为bool,但如果您有if,则编译器期望unit为返回类型。

我猜您打算将该值分配给该属性,而是使用<-

if somecondition then
    myobj.Property1 <- match myobj.Property1 with ...

无论如何,如果您想检查null是否分配默认值,您不需要matchif then就足够了:

if somecondition then
    if (myobj.Property1 = null) then myobj.Property1 <- SomePropertyType ()
    ...

<强>更新

您可以将if .. then“合并”到单个match

match (somecondition, myobj.Property1) with
| true, null -> myobj.Property1 <- SomePropertyType ()
...