我在C#.NET DLL中的名称空间MyClass
中的公共类MyNamespace
中有以下枚举:我引用并从我的F#模块打开:
public enum MyEnum {
ValueA,
ValueB,
ValueC}
我想在我的F#模块中将字符串s
转换为其MyEnum
等价物(如果可能)。试图实现它... ...
let myEnumValue = (MyClass.MyEnum) (Enum.Parse(typedefof<MyClass.MyEnum>, s))
...给我无效使用类型名称和/或对象构造函数。如有必要,请使用&#39; new&#39;并将构造函数应用于其参数... 错误。如果我使用typeof<MyClass.MyEnum>
而不是typedefof<MyClass.MyEnum>
,则相同。尝试...
let myEnumValue = (typedefof<MyClass.MyEnum>) (Enum.Parse(typedefof<MyClass.MyEnum>, s))
...或...
let myEnumValue = (typeof<MyClass.MyEnum>) (Enum.Parse(typedefof<MyClass.MyEnum>, s))
...给我该值不是函数且无法应用错误
我在F#代码的其他部分使用MyEnum
,所以我猜我的C#.NET DLL没有问题。
为了避免一些可能的问题: - )
MyEnum
值是
使用.ToString()
序列化为XML并反序列化枚举
来自XML将作为参数传递给F#函数int
等效的MyEnum
来写入和读取
XML是不受欢迎的,因为XML应该是人类可读的,而且更有可能是int
等价的MyClass
值要更改,而不是.ToString()
。答案 0 :(得分:4)
您的代码的问题是您尝试将Object(由Parse方法返回)转换为MyClass.MyEnum实例的方式。您尝试的语法导致“无效使用类型名称”错误。
在F#中,你按照以下方式进行了下载:
let myEnumValue = Enum.Parse(typedefof<MyClass.MyEnum>, s) :?> MyClass.MyEnum