Unit
to的转换void
被烘焙到编译器中。F# Core 中有一个FuncConvert
类用于在 和 之间进行FSharpFunc
转换Converter
。如何定义一个类似的类来Action<T>
转换Func<T, Unit>
?
static class ActionConvert {
private static readonly Unit Unit = MakeUnit();
public static Func<T, Unit> ToFunc<T>(Action<T> action) {
return new Func<T, Unit>(x => { action(x); return Unit; });
}
private static Unit MakeUnit() {
//using reflection because ctor is internal
return (Unit)Activator.CreateInstance(typeof(Unit), true);
}
}
然后你可以做
var foo = new Foo<int>();
var func = ActionConvert.ToFunc<int>(foo.DoStuff);
您甚至可以放弃该Unit
实例并返回null
。