gpt4 book ai didi

c# - 使用可选参数从 F# 对象在 C# 中创建对象

转载 作者:太空狗 更新时间:2023-10-29 20:47:04 25 4
gpt4 key购买 nike

我在 F# 中有一个对象如下...

type Person(?name : string) = 
let name = defaultArg name ""
member x.Name = name

我希望能够在 C# 项目中创建此对象的实例。我已经将正确的库作为引用添加到项目中,并且可以通过智能感知查看对象,但是我不确定创建对象实例的正确语法。

目前我的 C# 项目中有以下内容 - 编译器不喜欢...

var myObj1 = new Person("mark");            

最佳答案

要添加一些细节,F# 编译器使用不同的方法来表示可选参数,这(当前)与 C# 4.0 方法不兼容。当参数的类型为 option<'a> 时,F# 仅允许您使用更好的语法(并标记为可选)。您可以按原样使用它,也可以使用 defaultArg 在您的代码中提供默认值的函数。

在 C# 中,参数在元数据中专门表示(.NET 4.0 特定功能),并且默认值在元数据中指定。遗憾的是,无法在 F# 中创建与 C# 4.0 兼容的可选参数。

如果你想让 C# 代码更好一点,你可以定义一个静态实用类,它允许你在创建 option<'a> 时使用类型推断。值(value)观:

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"));

或者您可以修改 F# 声明以使用重载方法/构造函数,这在两种语言中都有效:

type Person(name) = 
do printfn "%s" name
// Add overloaded constructor with default value of name'
new () = Person("")

关于c# - 使用可选参数从 F# 对象在 C# 中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com