鉴于我有一个枚举:
type Cool = A = 'a'
| B = 'b'
我试着像这样打印
printf "%A" Cool.A
我得到以下异常:
ToString异常:传入的值必须是枚举基数或 枚举的基础类型,例如Int32。参数名称:值
为什么会发生这种情况并且(如果可能的话)我如何在枚举级别修复此问题?
答案 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
的基本值
虽然似乎允许char
(MSDN article on F# enums),但相应的article for C#却相反。此外,an older article具体说明:
base-type(可选)
指定为每个枚举器分配的存储的基础类型。它可以是除了char 之外的整数类型之一。默认值为int。
查看System.Enum.ToObject(Type,Object)
的{{3}},显然不支持char
。
所以,即使F#执行enum<char>
的特殊处理,最好还是避免它,避免将来遇到集成问题。