Ich suche das Äquivalent von C# default
Stichwort, zB:Wie lautet die Entsprechung in F # des Standardworts C#?
public T GetNext()
{
T temp = default(T);
...
Dank
Ich suche das Äquivalent von C# default
Stichwort, zB:Wie lautet die Entsprechung in F # des Standardworts C#?
public T GetNext()
{
T temp = default(T);
...
Dank
fand ich dies in einem Blog: "What does this C# code look like in F#? (part one: expressions and statements)"
C# einen Operator namens " Standard " , die die Null-Initialisierung Wert eines bestimmten Typs zurückgibt:
default(int)
Es hat begrenzten Nutzen; Am häufigsten können Sie Standard (T) in einem generischen verwenden. F # hat ein ähnliches Konstrukt als Bibliothek Funktion:
Unchecked.defaultof<int>
Technisch # Funktion Unchecked.defaultof<'a>
F gesprochen ist ein Äquivalent zu den default
Operator in C#. Aber ich denke, es ist erwähnenswert, dass defaultof
als unsichere Sache in F # betrachtet wird und sollte nur verwendet werden, wenn es wirklich notwendig ist (genau wie mit null
, die auch in F # entmutigt ist).
In den meisten Fällen können Sie die Verwendung von defaultof
mithilfe des Typs option<'a>
vermeiden. Sie können damit darstellen, dass ein Wert noch nicht verfügbar ist.
Hier ist jedoch ein kurzes Beispiel, um die Idee zu demonstrieren. Der folgende C# -Code:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
Würde wahrscheinlich wie dies in F # geschrieben werden (Imperativ Funktionen verwenden):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Natürlich ist dies auf Ihr spezielles Szenario hängt und in einigen Fällen defaultof
ist die einzige Sache, du kannst tun. Allerdings wollte ich nur darauf hinweisen, dass defaultof
weniger häufig in F # verwendet wird.
In Ihrem C# -Beispiel verwenden Sie einen Zuweisungsoperator anstelle eines Gleichheitsoperators in der if-Anweisung. Ist das Absicht? – doppelgreener
Ich sollte sagen, es funktioniert nicht für mich, lass t = ref Keine t: = Einige (context.Items.FirstOrDefault (Spaß ii -> ii.Name = i.Name)) übereinstimmen! T mit | Etwas es -> - fertig hier ist es sogar null | Keine -> ignorieren –
+1 Gute Frage. Sehen Sie sich dieses Beispiel an ^^ –