Je cherche l'équivalent de mots clés C# default
, par exemple:Quel est l'équivalent en F # du mot-clé par défaut C#?
public T GetNext()
{
T temp = default(T);
...
Merci
Je cherche l'équivalent de mots clés C# default
, par exemple:Quel est l'équivalent en F # du mot-clé par défaut C#?
public T GetNext()
{
T temp = default(T);
...
Merci
Je trouve cela dans un blog: "What does this C# code look like in F#? (part one: expressions and statements)"
C# a un opérateur appelé " par défaut " qui renvoie la valeur d'initialisation zéro d'un type donné:
default(int)
Il a une utilité limitée; le plus souvent, vous pouvez utiliser par défaut (T) dans un générique. F # a une construction similaire comme une bibliothèque fonction:
Unchecked.defaultof<int>
Techniquement parlant F # Unchecked.defaultof<'a>
fonction est un équivalent à l'opérateur default
en C#. Cependant, je pense qu'il est à noter que defaultof
est considéré comme dangereuse chose dans F # et ne devrait être utilisé que lorsque c'est vraiment nécessaire (tout comme en utilisant null
, qui est également déconseillé en F #). Dans la plupart des cas, vous pouvez éviter le besoin de defaultof
en utilisant le type option<'a>
. Cela vous permet de représenter le fait qu'une valeur n'est pas encore disponible.
Cependant, voici un bref exemple pour démontrer l'idée. Le code C#:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
serait probablement écrit comme ça dans F # (en utilisant les caractéristiques impératives):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Bien sûr, cela dépend de votre scénario spécifique et dans certains cas defaultof
est la seule chose tu peux faire. Cependant, je voulais juste souligner que defaultof
est utilisé moins fréquemment dans F #.
Dans votre exemple C#, vous utilisez un opérateur d'affectation à la place d'un opérateur d'égalité dans l'instruction if. Est-ce délibéré? – doppelgreener
Je devrais dire que cela ne fonctionne pas pour moi, let t = ref Aucun t: = Some (context.Items.FirstOrDefault (amusant ii -> ii.Name = i.Name)) match! T avec | Certains il -> - fini ici même c'est nul | Aucun -> ignore –
+1 Bonne question. Continuez à regarder ceci vers le haut ^^ –