这只是一个实验/学习的例子。我是一个极端功能性的菜鸟。
要在C#中使用的F#代码:
module C
open System
open System.Collections.Generic
let Log format (f:Action<List<Object>>) =
let arguments = f.Invoke(new List<Object>())
let message = String.Format(format, arguments)
Console.Write(message)
调用它的C#代码:
C.Log("Hello {0}", c =>
{
c.Add("World");
});
预期结果
Hello World
实际结果
Hello
答案 0 :(得分:3)
问题是您正在创建新的List<Object>
并将其传递给Action<T>
。 Action<T>
委托不返回任何值,因此您永远不会返回此列表。相反,Invoke
方法只会返回null
调用中忽略的String.Format
。您需要在委托调用和String.Format
尝试以下
let list = List<Object>();
f.Invoke(list);
let message = String.Format(format, list.ToArray());