【发布时间】:2015-08-31 19:54:52
【问题描述】:
这个问题与this one 中的 C#/F# 兼容性无关。
我想知道实现F# Unit 之类的类型而不是使用void 的正确方法。
显然我会丢弃这个结果,我不会把这个类型暴露给外界。
想知道一个空类是否可以扮演这个角色。
internal class Unit
{
}
例如在language-ext库中,作者使用了struct。
这个选择有什么好处吗?
【问题讨论】:
-
结构体值和始终为空的类值在性能方面大致相同,但前者可以限制为奇异值,而后者则不能(null 和非null)。
internal abstract class Unit会是一个更好的主意... -
@Foole Dude,把你的评论放在答案框中,太棒了! :-)
-
@gsscoder :重点是允许奇异值。对于值类型,这很容易,因为它们不能为空;如果装箱,则值的类型为
System.Object,而不是值类型。引用类型比较棘手,因为 null 总是一个可能的值;在这种情况下,null是理想的标记值,目标是使 non-null 值成为不可能,因此在类上推荐abstract或static。跨度> -
@gsscoder 无需羞耻!不过,出于迂腐精确的考虑,我将指出值为
null的 Nullable 与 null 引用不同。 (然而,这样的类型也不能满足 Thomas Petricek 的要求,即该类型只有一个值。)
标签: c# f# functional-programming unit-type