Pour ajouter quelques détails, le compilateur F # utilise une approche différente pour représenter les paramètres optionnels, ce qui n'est pas (actuellement) compatible avec l'approche C# 4.0. F # vous permet simplement d'utiliser une syntaxe plus agréable lorsque le paramètre a le type option<'a>
(et est marqué comme facultatif). Vous pouvez l'utiliser tel quel ou vous pouvez utiliser la fonction defaultArg
pour fournir la valeur par défaut dans votre code. En C#, le paramètre est représenté spécialement dans les métadonnées (fonctionnalité spécifique .NET 4.0) et la valeur par défaut est dans les métadonnées. Malheureusement, il n'y a aucun moyen de créer un paramètre optionnel compatible C# 4.0 en F #.
Si vous voulez faire le code C# un peu peu plus agréable, vous pouvez définir une classe utilitaire statique qui vous permet d'utiliser l'inférence de type lors de la création option<'a>
valeurs:
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"));
Ou vous pouvez modifier votre F # déclaration d'utiliser des méthodes/constructeurs surchargées, qui travaille dans les deux langues:
type Person(name) =
do printfn "%s" name
// Add overloaded constructor with default value of name'
new() = Person("")
Que dit exactement le compilateur? Le compilateur C# de Microsoft est généralement assez explicite lorsqu'il rencontre des choses qu'il ne comprend pas. –