let retVal =
if reader.Read() then
(reader.GetString(0), getBytesData reader 1, reader.GetDateTime(2))
else
null
Run Code Online (Sandbox Code Playgroud)
F#不允许返回null
我怎样才能将值返回为元组或null?
Yin*_*Zhu 11
并不是F#不允许您返回null.
这是因为那时部分和其他部分有不同的类型.
您可以使用选项类型.
let retVal =
if reader.Read() then
Some (reader.GetString(0), getBytesData reader 1, reader.GetDateTime(2))
else
None
Run Code Online (Sandbox Code Playgroud)
使用时retVal
,使用模式匹配:
match retVal with
| Some v -> ...
| None -> // null case
Run Code Online (Sandbox Code Playgroud)
为了向Yin Zhu的答案添加一些额外的信息,null
F#语言中有价值的情况如下:
F#类型如元组(例如int * int
),这正是你的情况没有null
作为有效值,所以你不能null
在这种情况下使用(其他类型的函数值,例如int -> int
,列表和大多数F#库类型)
.NET框架中的类型可以具有null
值,因此您可以编写:
let (rnd:Random) = null
Run Code Online (Sandbox Code Playgroud)
这不是惯用的F#风格,但它是允许的.
如果您定义自己的F#类型,它将不会自动允许您null
用作类型的有效值(它遵循目标以最小化null
F#中的使用).但是,您可以明确允许:
[<AllowNullLiteral>]
type MyType = ...
Run Code Online (Sandbox Code Playgroud)