Unitto的转换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。