当前位置:  开发笔记 > 编程语言 > 正文

从传递给C#的F#列表中检索项目

如何解决《从传递给C#的F#列表中检索项目》经验,为你挑选了2个好方法。

我在C#中有一个函数,它在F#中调用,在a中传递它的参数Microsoft.FSharp.Collections.List.

我怎样才能从C#函数中的F#List中获取项目?

编辑

我找到了一种循环遍历它们的"功能"样式方法,并且可以将它们传递给下面的函数以返回C#System.Collection.List:

private static List GetParams(Microsoft.FSharp.Collections.List inparams)
{
    List parameters = new List();
    while (inparams != null)
    {
        parameters.Add(inparams.Head);
        inparams = inparams.Tail;
     }
     return inparams;
 }


再次编辑

如下所述,F#List是Enumerable,所以上面的函数可以用行代替;

new List(parameters);

但是,有没有办法按索引引用F#列表中的项目?



1> Brian..:

通常,避免将F#特定类型(如F#'list'类型)暴露给其他语言,因为体验并不是那么好(正如您所看到的).

F#列表是一个IEnumerable,所以你可以很容易地从它创建一个System.Collections.Generic.List.

没有有效的索引,因为它是单链接列表,因此访问任意元素是O(n).如果您确实需要索引,则最好更改为其他数据结构.


嗨!每个列表都有其目的... http://blogs.msdn.com/chrsmith/archive/2008/07/10/mastering-f-lists.aspx您可以将F#list转换为IEnumerable,如下所示:mylist |> List. toSeq

2> Tuomas Hieta..:

在我的C#-project中,我使用扩展方法轻松地在C#和F#之间转换列表:

using System;
using System.Collections.Generic;
using Microsoft.FSharp.Collections;
public static class FSharpInteropExtensions {
   public static FSharpList ToFSharplist(this IEnumerable myList)
   {
       return Microsoft.FSharp.Collections.ListModule.of_seq(myList);
   }

   public static IEnumerable ToEnumerable(this FSharpList fList)
   {
       return Microsoft.FSharp.Collections.SeqModule.of_list(fList);
   }
}

然后使用就像:

var lst = new List { 1, 2, 3 }.ToFSharplist();

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有