Para agregar algunos detalles, el compilador F # utiliza un enfoque diferente para representar los parámetros opcionales, que no es (actualmente) compatible con el enfoque C# 4.0. F # simplemente le permite usar una sintaxis más agradable cuando el parámetro tiene el tipo option<'a>
(y está marcado como opcional). Puede usarlo tal cual, o puede usar la función defaultArg
para proporcionar el valor predeterminado en su código.
En C#, el parámetro se representa especialmente en los metadatos (característica específica de .NET 4.0), y el valor predeterminado se especifica en los metadatos. Desafortunadamente, no hay forma de crear un parámetro opcional compatible con C# 4.0 en F #.
Si desea hacer que el código C# un poco-poco más agradable, se puede definir una clase de utilidad estática que le permite utilizar la inferencia de tipos al crear option<'a>
valores:
static class FSharpOption {
static FSharpOption<T> Some<T>(T value) {
return new FSharpOption<T>(value);
}
}
// Then you can write just:
var myObj1 = new Person(FSharpOption.Some("mark"));
o puede modificar su F # Declaración de utilizar métodos sobrecargados/constructores, que funciona en las dos lenguas:
type Person(name) =
do printfn "%s" name
// Add overloaded constructor with default value of name'
new() = Person("")
¿Qué dice exactamente el compilador? El compilador C# de Microsoft suele ser bastante explícito cuando encuentra cosas que no comprende. –