可以';t枚举C#中的F#列表

本文关键字:中的 列表 枚举 可以 | 更新日期: 2023-09-27 18:05:49

在下面的F#代码中,我有一个定义了两个值的模块:int list(int list) list

在下面的C#代码中,我有一些单元测试,试图迭代F#中定义的列表值。

当我运行单元测试时,我会得到以下输出。

[1; 2; 3] 3 1 2 3

[[1; 2; 3]; [2; 3; 4]] Test
'MasterMind.Test.ConsistentCodeTests.CanIIterateListsOfLists'失败:
System.EntryPointNotFoundException:未找到入口点
System.Collections.Generic.IEnumerable'1.GetEnumerator()
System.Linq.Enumerable.Count[TSource](IEnumerable'1 source)
ConsistentCodeTests.cs(49,0):
MasterMind.Test.ConsistentCodeTests.CanIIterateListsOfLists()

1通过,1失败,0跳过,耗时3.11秒(NUnit 2.6.4(。

访问int list工作正常。C#代码可以成功地打印它,获取它的计数,并对它进行迭代

尝试获取(int list) list值的计数或对其值进行迭代会引发EntryPointNotFoundException。我不知道该怎么做才能纠正这个错误。

module Game.Engine
  let aList = [1;2;3]
  let listOfLists = [[1;2;3];[2;3;4]]
[Test] public void CanIIterateAList()
{
    Console.WriteLine(Game.Engine.aList);
    Console.WriteLine(Game.Engine.aList.Count());
    foreach (int i in Game.Engine.aList) Console.WriteLine(i);
}
[Test] public void CanIIterateListsOfLists()
{
    Console.WriteLine(Game.Engine.listOfLists);
    Console.WriteLine(Game.Engine.listOfLists.Count());
}

可以';t枚举C#中的F#列表

这听起来像是FSharp.Core版本不匹配。请检查您的某个软件包是否未安装FSharp.Core v3.something-如果安装了,请更新到最新的稳定软件包。

如果这还不够,请在测试项目的app.config中(假设测试运行者会注意到这一点(检查是否有绑定重定向到正确的v4程序集。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

如果这仍然没有帮助,请删除测试项目下的obj文件夹并重新生成。