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

时间:2010-02-11 17:17:36

标签: c# f# default keyword c#-to-f#

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

public T GetNext()
{
    T temp = default(T);
            ...

由于

2 个答案:

答案 0 :(得分:79)

我在博客中发现了这一点:“What does this C# code look like in F#? (part one: expressions and statements)

  

C#有一个名为“默认”的运算符   返回零初始化   给定类型的值:

default(int) 
     

实用性有限;最常见的是你可以使用   默认(T)在泛型中。 F#有一个   类似于库的构造   功能:

Unchecked.defaultof<int>

答案 1 :(得分:32)

从技术上讲,F#函数Unchecked.defaultof<'a>等同于C#中的default运算符。但是,我认为值得注意的是defaultof被认为是F#中的不安全的事物,并且只有在真正需要时才使用(就像使用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;

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

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

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