gss*_*der 8 c# f# functional-programming unit-type
这个问题是不是C#/ F#的兼容性在这一个.
我想知道实现像F#Unit这样的类型代替使用的正确方法void.
显然我会放弃这个结果,我不会将这种类型暴露给外界.
想知道一个空类是否可以冒充这个角色.
internal class Unit
{
}
Run Code Online (Sandbox Code Playgroud)
例如,在language-ext库中,作者使用了一个struct.
这个选择有什么好处吗?
我不确定Unit从C#定义使用的最佳方法是什么.它可能与在F#中完成的方式不同(因为在F#中,编译器以某种方式隐藏了用法).
但是,您实际上可以unit在核心库中找到F#的实现:
以下是有关F#unit实现的要点
GetHashCode并Equals以同样的方式到Rx版本IComparable和所有unit类型的值相等unit值.它也没有默认实例(与Rx单元不同),所以在F#中,所有单位值实际上都表示为null.但是,语言/编译器通常隐藏这一事实.所以,听起来F#的唯一区别在于它使用了这个null值.如果要unit明确使用,这可能不是最佳选择.但是,如果你有,Unit.Default那么你最终定义了一个具有两个可能值的类型,因为它可以是Unit.Default或者null(因此它实际上不是一个单位!)