.net 从函数F返回null#
我正在尝试在F#中实现以下Swift方法:.net 从函数F返回null#,.net,f#,xamarin.ios,.net,F#,Xamarin.ios,我正在尝试在F#中实现以下Swift方法: 问题是F#中的每个块都需要一个返回值,因此我不能直接从if块返回,因为这将被视为if块的返回值,而不是整个函数的返回值。为了克服这个问题,我创建了初始化为null的returnController变量,然后在函数末尾返回它。这是在F#中处理此类用例的正确方法吗?使用可变返回变量在这里没有帮助。在F#中,内置类型不可为空,但.NET/C#类可为空,例如string。可以在不同的分支中返回null或字符串。这包括: if true then ""
问题是
F#
中的每个块都需要一个返回值,因此我不能直接从if块返回,因为这将被视为if块的返回值,而不是整个函数的返回值。为了克服这个问题,我创建了初始化为null的returnController
变量,然后在函数末尾返回它。这是在F#中处理此类用例的正确方法吗?使用可变返回变量在这里没有帮助。在F#中,内置类型不可为空,但.NET/C#类可为空,例如string
。可以在不同的分支中返回null或字符串。这包括:
if true then
""
else
null
如果您在F#中定义了自己的类型,则不能为其分配null
:
type A = { A : int }
if true then
{ A = 1}
else
null // Error: The type 'A' does not have 'null' as a proper value
要解决此问题,您需要将您的值包装在选项中
:
if true then
Some { A = 1}
else
None
现在返回的类型是选项
。选项
值必须显式展开,以便处理无
情况:
let x = Some { A = 1 }
match x with
| Some a -> a.A
| None -> 0
UIViewController
类型是MonoTouch和Xamarin.IOS的一部分,代表IOS开发中应用程序的一个活动/类/一个页面。它编译。如果它像字符串那样编译,这仍然可行吗?我认为这是可以为空的,因此您可以只使用空分支,但是您必须确保每个如果都有否则它不会像我现在设置的那样工作吗?其中唯一的返回值在函数的末尾?是的,它可以工作,但不是必需的。一个更直接的Swift代码端口也应该可以工作。=代码>不是F#中的运算符。“不等于”是
。但是,Swift代码似乎确实在使用?。
nil propogation运算符间接检查flatImages
是否为null。因此,您应该检查flatImages
是否为空。flatImages
不能像我设计F#code那样为空,因为它被初始化为空列表。在Swift版本中,它是可选的,因此这里不需要额外的检查。对不起,我应该澄清一下。
if true then
Some { A = 1}
else
None
let x = Some { A = 1 }
match x with
| Some a -> a.A
| None -> 0