我有以下代码片段,该代码片段创建了一个具有属性Name和FirstLetter的匿名类型的元素数组:

string[] arr = { "Dennis", "Leo", "Paul" };

var myRes = arr.Select(a => new { Name = a, FirstLetter = a[0] });

我想在F#中做同样的事情。我试过了:
let names = [| "Dennis"; "Leo"; "Paul" |]

let myRes = names.Select(fun a -> {Name = a; FirstLetter = a[0]} )

但这无法编译。它说:

记录标签“名称”未定义。

我怎样才能使这条线在F#中工作?

最佳答案

如注释中所述,F#不支持匿名类型。因此,如果要将序列投影到另一个序列中,请创建一条记录,该记录本质上是具有命名字段的元组。

type p = {
  Name:string;
  FirstLetter: char
}

let names = [| "Dennis"; "Leo"; "Paul" |]
let myRes = names.Select(fun a -> {Name = a; FirstLetter = a.[0]} )

10-07 13:15