我正在寻找等效的C#default
关键字,例如:
public T GetNext()
{
T temp = default(T);
...
谢谢
Answers:
我在博客中找到了这个:“ C#代码在F#中是什么样的?(第一部分:表达式和语句) ”
C#具有一个称为“默认”的运算符,该运算符返回给定类型的零初始化值:
default(int)
它的实用性有限;最常见的是,您可以在泛型中使用default(T)。F#具有与库函数类似的构造:
Unchecked.defaultof<int>
从技术上讲,F#函数与C#中Unchecked.defaultof<'a>
的default
运算符等效。但是,我认为值得注意的是,在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;
可能会这样写在F#中(使用命令式功能):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
当然,这取决于您的特定情况,在某些情况下,这defaultof
是您唯一可以做的。但是,我只想指出defaultof
在F#中使用频率较低。
Some(_)
。它要么返回,Some(value)
要么Some(defaultof<>)
两者都将匹配Some _
您的match表达式中的大小写。您可以使用context.Items |> Seq.tryFind(fun II -> ii.Name = i.Name)
匹配表达式即可按预期工作