在F中使用C#Linq ForEach()#

在F中使用C#Linq ForEach()#,c#,linq,f#,c#-to-f#,C#,Linq,F#,C# To F#,我正在将一些代码从C#翻译成F#,我有以下几行代码需要跨越F#: List vmList=newlist(); m_vimClient.findentialview(typeof(VirtualMachine),null,null,null).ForEach(vm=>vmList.Add((VirtualMachine)vm)); 返回vmList; 我做了以下工作: let vmList = vimClient.FindEntityViews(typedefof<VirtualMach

我正在将一些代码从C#翻译成F#,我有以下几行代码需要跨越F#:

List vmList=newlist();
m_vimClient.findentialview(typeof(VirtualMachine),null,null,null).ForEach(vm=>vmList.Add((VirtualMachine)vm));
返回vmList;
我做了以下工作:

let vmList = vimClient.FindEntityViews(typedefof<VirtualMachine>, null, null, null).ForEach(vm => vmList.Add((VirtualMachine)vm))
vmList
let-vmList=vimClient.FindEntityViews(typedefof,null,null,null).ForEach(vm=>vmList.Add((虚拟机)vm))
vmList
不幸的是,Intellisense告诉我,
vm
vmList
在F#code的
ForEach()部分中没有定义


如何解决这个问题?

您使用的lambda语法是C#语法。在F#中,lambda的定义类似于
fun vm->…

也就是说,您根本不需要ForEach的
ForEach
。C#版本可以在没有lambda的情况下编写为:

var vmList = m_vimClient.FindEntityViews(typeof(VirtualMachine), null, null, null)
    .Cast<VirtualMachine>()
    .ToList();
var vmList=m_vimClient.FindEntityViews(typeof(VirtualMachine),null,null,null)
.Cast()
.ToList();
在F#中,这将是:

let vmList = m_vimClient.FindEntityViews(typedefof<VirtualMachine>, null, null, null)
                 |> Seq.cast<VirtualMachine>
                 |> Seq.toList
让vmList=m_vimClient.FindEntityViews(typedefof,null,null,null)
|>序号
|>序号:toList

您使用的lambda语法是C#语法。在F#中,lambda的定义类似于
fun vm->…

也就是说,您根本不需要ForEach的
ForEach
。C#版本可以在没有lambda的情况下编写为:

var vmList = m_vimClient.FindEntityViews(typeof(VirtualMachine), null, null, null)
    .Cast<VirtualMachine>()
    .ToList();
var vmList=m_vimClient.FindEntityViews(typeof(VirtualMachine),null,null,null)
.Cast()
.ToList();
在F#中,这将是:

let vmList = m_vimClient.FindEntityViews(typedefof<VirtualMachine>, null, null, null)
                 |> Seq.cast<VirtualMachine>
                 |> Seq.toList
让vmList=m_vimClient.FindEntityViews(typedefof,null,null,null)
|>序号
|>序号:toList

这并不完全等同,因为
Seq.toList
返回一个F#
列表(即单链接列表)。如果需要
System.Collections.Generic.List
,则可以使用
|>fun s->new ResizeArray
替换最后一行。如果您使用的是F#4.0预览版,甚至可以调整数组的大小。这并不完全相同,因为
Seq.toList
返回一个F#
列表(即单链接列表)。如果需要
System.Collections.Generic.List
,则可以使用
|>fun s->new ResizeArray
替换最后一行。如果您使用的是F#4.0预览版,甚至可以调整数组的大小。