C#默认关键字的F#中的等价物是什么?

Str*_*ger 72 c# f# default keyword c#-to-f#

我正在寻找相当于C#的default关键字,例如:

public T GetNext()
{
    T temp = default(T);
            ...
Run Code Online (Sandbox Code Playgroud)

谢谢

blu*_*blu 82

我在博客中发现了这一点:" 这个C#代码在F#中是什么样的?(第一部分:表达式和语句) "

C#有一个名为"default"的运算符,它返回给定类型的零初始化值:

default(int) 
Run Code Online (Sandbox Code Playgroud)

它的实用性有限; 最常见的是你可以在泛型中使用默认值(T).F#具有与库函数类似的构造:

Unchecked.defaultof<int>
Run Code Online (Sandbox Code Playgroud)


Tom*_*cek 33

从技术上讲,F#函数Unchecked.defaultof<'a>相当于defaultC#中的运算符.但是,我认为值得注意的是,在F#中defaultof被认为是不安全的东西,并且只有在真正需要时才应该使用(就像使用一样null,在F#中也是不鼓励的).

在大多数情况下,您可以避免defaultof使用该option<'a>类型.它允许您表示值尚不可用的事实.

但是,这里有一个简短的例子来证明这个想法.以下C#代码:

T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
Run Code Online (Sandbox Code Playgroud)

在F#中可能会这样写(使用命令功能):

let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with 
| None -> bar(arg)
| Some(temp) -> temp
Run Code Online (Sandbox Code Playgroud)

当然,这取决于您的具体情况,在某些情况下,您defaultof是唯一可以做的事情.但是,我只想指出defaultof在F#中使用频率较低.