加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:18:07 所属栏目:百科 来源:网络整理
导读:我在F#中有一个对象如下…… type Person(?name : string) = let name = defaultArg name "" member x.Name = name 我希望能够在C#项目中创建此对象的实例.我已经将正确的库作为参考添加到项目中,并且可以通过intellisense查看对象,但是我不确定在正确的语法
我在F#中有一个对象如下……
type Person(?name : string) = 
    let name = defaultArg name ""
    member x.Name = name

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

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

var myObj1 = new Person("mark");

解决方法

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

在C#中,参数在元数据(.NET 4.0特定功能)中特别表示,默认值在元数据中指定.不幸的是,没有办法在F#中创建C#4.0兼容的可选参数.

如果您想使C#代码更好一点,您可以定义一个静态实用程序类,允许您在创建选项<'a>时使用类型推断.值:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读