2010-02-11 85 views

回答

31

技術上講F#函數Unchecked.defaultof<'a>是一個相當於default操作者在C#。不過,我認爲值得注意的是,defaultof在F#中被認爲是不安全的,應該只在真正需要時才使用(就像使用null,這在F#中也不鼓勵)。

在大多數情況下,您可以通過使用option<'a>類型來避免需要defaultof。它允許您表示一個值尚不可用的事實。

但是,這裏是一個簡短的例子來演示這個想法。下面的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是唯一你可以做。不過,我只想指出在F#中使用較少的defaultof

+1

在你的C#示例中,你在if語句中使用賦值運算符而不是等號運算符。這是故意的嗎? – doppelgreener 2013-10-14 05:03:02

+0

我應該說這對我不起作用,讓t = ref無 t:= Some(context.Items.FirstOrDefault(fun ii - > ii.Name = i.Name)) match!t with |一些它 - > - 完成這裏即使它是空的 |無 - >忽略 – 2015-01-20 15:00:12

相關問題