我有以下代码
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 ......语句?
答案 0 :(得分:10)
您正在比较两个值(使用=
),因此返回类型将为bool
,但如果您有if,则编译器期望unit
为返回类型。
我猜您打算将该值分配给该属性,而是使用<-
:
if somecondition then
myobj.Property1 <- match myobj.Property1 with ...
无论如何,如果您想检查null
是否分配默认值,您不需要match
,if
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 ()
...