打印枚举时出现ToString异常

时间:2012-08-17 21:01:21

标签: .net f#

鉴于我有一个枚举:

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

我试着像这样打印

printf "%A" Cool.A

我得到以下异常:

  

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

为什么会发生这种情况并且(如果可能的话)我如何在枚举级别修复此问题?

2 个答案:

答案 0 :(得分:3)

我可以在使用F#2.0编译器定位.Net 4.0的计算机上重新启动它,但不能使用F#2目标.Net 3.5或更低版本,或VS2012(F#3.0)计算机(其中.Net 4.5取代4.0)。 / p>

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

答案 1 :(得分:2)

我认为最好不要将char用作enum的基本值 虽然似乎允许charMSDN article on F# enums),但相应的article for C#却相反。此外,an older article具体说明:

  

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

查看System.Enum.ToObject(Type,Object)的{​​{3}},显然不支持char

所以,即使F#执行enum<char>的特殊处理,最好还是避免它,避免将来遇到集成问题。