繁体   English   中英

在 C# 中正确实现 F# Unit

[英]Properly implement F# Unit in C#

这个问题与这个<\/a>问题中的 C#\/F# 兼容性无关。

我想知道实现F# Unit<\/a>之类的类型而不是使用void<\/code>的正确方法。

显然我会丢弃这个结果,并且不会将这种类型暴露给外界。

想知道一个空类是否可以扮演这个角色。

internal class Unit
{
}

我不确定从 C# 定义Unit以供使用的最佳方法是什么。 它可能与 F# 中的做法不同(因为在 F# 中,编译器以某种方式隐藏了用法)。

但是,您实际上可以在核心库中找到 F# unit的实现:

以下是有关 F# unit实现的要点

  • 它以与 Rx 版本相同的方式实现GetHashCodeEquals
  • 它是IComparable并且unit类型的所有值都相等
  • 最重要的是,它有一个私有构造函数,所以你不能创建一个新的unit值。 它也没有默认实例(与 Rx 单元不同),因此在 F# 中,所有单元值实际上都表示为null 但是,语言/编译器通常会隐藏这一事实。

因此,听起来 F# 中的唯一区别是它使用null值。 如果您想明确使用unit ,这可能不是最佳选择。 但是,如果您有Unit.Default那么您最终会定义一个具有两个可能值的类型,因为它可以是Unit.Defaultnull (因此它不是真正的单位!)

System.ValueTuple (不带泛型参数)在 C# 中是非常重要的单元 源代码是开放的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM