Busco el equivalente de C# default
de palabras clave, por ejemplo:¿Cuál es el equivalente en F # de la palabra clave predeterminada de C#?
public T GetNext()
{
T temp = default(T);
...
Gracias
Busco el equivalente de C# default
de palabras clave, por ejemplo:¿Cuál es el equivalente en F # de la palabra clave predeterminada de C#?
public T GetNext()
{
T temp = default(T);
...
Gracias
me encontré con esto en un blog: "What does this C# code look like in F#? (part one: expressions and statements)"
C# tiene un operador llamado " predeterminado " que devuelve el valor de inicialización cero de un tipo determinado:
default(int)
Tiene una utilidad limitada; lo más comúnmente posible puede utilizar por defecto (T) en un genérico. F # tiene una construcción similar como una función de biblioteca :
Unchecked.defaultof<int>
Técnicamente hablando F # función Unchecked.defaultof<'a>
es un equivalente al operador default
en C#. Sin embargo, creo que vale la pena señalar que defaultof
se considera como inseguro cosa en F # y debe usarse solo cuando es realmente necesario (al igual que con null
, que también se desaconseja en F #).
En la mayoría de las situaciones, puede evitar la necesidad de defaultof
utilizando el tipo option<'a>
. Le permite representar el hecho de que un valor aún no está disponible.
Sin embargo, aquí hay un breve ejemplo para demostrar la idea. El siguiente código C#:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
probablemente sería escrito como este en F # (usando características imperativas):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Por supuesto, esto depende de su situación específica y en algunos casos defaultof
es lo único tu puedes hacer. Sin embargo, solo quería señalar que defaultof
se usa con menos frecuencia en F #.
En su ejemplo de C#, utiliza un operador de asignación en lugar de un operador de igualdad dentro de la instrucción if. Es eso deliberado? – doppelgreener
Debo decir que no funciona para mí, let t = ref None t: = Some (context.Items.FirstOrDefault (fun ii -> ii.Name = i.Name)) coincide con t | Algo que -> - terminado aquí incluso es nulo | Ninguno -> ignorar –
+1 Buena pregunta. Siga teniendo que mirar esto ^^ –