C#の既定のキーワードのF#で同等とは何ですか?
質問
私は例えば、C#のdefault
キーワードの同等を探しています:
public T GetNext()
{
T temp = default(T);
...
おかげ
解決
私はブログでこれを見つけた:「このC#のコードを見て何以下のようなF#で(パート1:式と文)?に "
C#が「デフォルト」と呼ばれる演算子を持っています それは、ゼロ初期化を返します 所与のタイプの値:
default(int)
これは、限られた有用性を有します。最も一般的に使用すること ジェネリックのデフォルト(T)。 F#が持っています ライブラリと同様の構造 機能:
Unchecked.defaultof<int>
他のヒント
技術的にF#関数Unchecked.defaultof<'a>
はC#でdefault
演算と等価です。しかし、私はそれがdefaultof
はF#での、安全でないのものとしてみなされ、(ちょうどまた、F#で推奨されてnull
を、使用してように)それは本当に必要な場合にのみ使用されるべきであることは注目に値すると思います。
状況のほとんどでは、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#であまり頻繁に使用されていることを指摘したかっます。
所属していません StackOverflow