6

鉴于我有一个枚举:

type Cool = A = 'a'
          | B = 'b'

我试着像这样打印它

printf "%A" Cool.A

我得到以下异常:

ToString 异常:传入的值必须是枚举基类或枚举的基础类型,例如 Int32。参数名称:值

为什么会发生这种情况以及(如果可能)我如何在枚举级别解决这个问题?

4

2 回答 2

3

我可以在具有针对 .Net 4.0 的 F# 2.0 编译器的机器上重现此操作,但不能在针对 .Net 3.5 或更低版本的 F# 2 或在 VS2012 (F# 3.0) 机器上(其中 .Net 4.5 取代 4.0)。

我现在不确定原因,但希望此信息可以帮助您或其他人缩小范围或找到解决方法。

于 2012-08-17T22:26:48.437 回答
2

我认为最好不要char用作enum.
虽然char似乎是允许的(关于 F# 枚举的 MSDN 文章),但 C# 的相应文章却说相反。此外,一篇较早的文章具体说:

base-type (可选)
指定为每个枚举器分配的存储的基础类型。它可以是除 char 之外的整数类型之一。默认值为整数。

源码System.Enum.ToObject(Type,Object)很明显char不支持。

因此,即使 F# 对 执行特殊处理enum<char>也最好避免它,以免将来出现集成问题。

于 2012-08-18T12:04:22.760 回答