无法枚举C#中的F#列表列表

时间:2016-09-05 19:55:02

标签: c# exception f#

在下面的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());
}

1 个答案:

答案 0 :(得分:2)

这听起来像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文件夹并重建。