C#命名参数的F#等效项是什么?

时间:2018-07-09 08:54:21

标签: c# .net f# yaml

在我正在查看的DotNetYaml示例代码中,有一个C#构造:

var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention());
var order = deserializer.Deserialize<Order>(input);

等效的F#代码是什么?我尝试过

let deserializer = new Deserializer(namingConvention=new CamelCaseNamingConvention())
deserializer.Deserialize<Meta>(input)

1 个答案:

答案 0 :(得分:4)

如果您有一个定义可选参数的C#库,则可以使用问题中使用的语法。为了快速说明这种情况,我将以下C#代码编译为库:

using System;

namespace Demo {
  public class MyClass {
    public static void Foo(int first, string second = "foo", string third = "bar") { }
  }
}

您可以按如下所示在F#中引用并使用它:

open Demo
MyClass.Foo(1, third="hi")

我尝试使用YamlDotNet来执行此操作,我猜这是您正在使用的库,但是我收到一个错误,指出Deserializer类没有将namingConvention作为论据,所以我的猜测是您正在使用的库版本可能与您所想的不同(或者,我对正在使用的库的猜测是错误的...)。