如何通过LINQ选择F#中的匿名类型

bri*_*nch 5 .net linq f#

我有这段代码片段,它创建了一个匿名类型元素数组,其中包含Name和FirstLetter属性:

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

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

我想在F#中做同样的事情.我试过了:

let names = [| "Dennis"; "Leo"; "Paul" |]

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

但这不编译.它说:

未定义记录标签"名称".

如何让这条线在F#中工作?

小智 6

与评论一样,F#不支持匿名类型.因此,如果您想将序列投影到另一个序列中,请创建一个记录,它实际上是一个带有命名字段的元组.

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

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

  • 在F#中添加匿名类型的请求最近得到了一些牵引力.https://github.com/fsharp/fslang-suggestions/issues/207 (3认同)