下面的枚举位于MyNamespace命名空间中的公共类MyNamespace中,在C#.NET DLL中引用并从F#模块打开:
public enum MyEnum {
ValueA,
ValueB,
ValueC}我希望在我的s模块中将字符串MyEnum转换为它的MyEnum等效(如果可能的话)。就像.
let myEnumValue = (MyClass.MyEnum) (Enum.Parse(typedefof<MyClass.MyEnum>, s))...gives me类型名称和/或对象构造函数的无效使用。如果有必要使用'new‘并将构造函数应用于其参数..。错误。如果我使用typeof<MyClass.MyEnum>而不是typedefof<MyClass.MyEnum>,情况也是一样的。试着..。
let myEnumValue = (typedefof<MyClass.MyEnum>) (Enum.Parse(typedefof<MyClass.MyEnum>, s))...or...
let myEnumValue = (typeof<MyClass.MyEnum>) (Enum.Parse(typedefof<MyClass.MyEnum>, s))..。给我的值不是一个函数,不能应用错误。
我在我的MyEnum代码的其他部分中很好地使用了F#,所以我想我的C#.NET DLL没有问题。
为了避免一些可能的问题:)
MyEnum值使用.ToString()序列化为XML,从XML反序列化的枚举将作为参数传递给F#函数。int等效的MyEnum来写入和读取XML是不可取的,因为XML应该是人类可读的,而且MyClass值的int等效值比.ToString()值更有可能发生变化。发布于 2014-10-26 13:30:32
代码的问题在于试图将对象(由Parse方法返回)转换为MyClass.MyEnum实例的方式。您尝试的语法将导致“类型名称的无效使用”错误。
在F#中,您可以按以下方式向下转换:
let myEnumValue = Enum.Parse(typedefof<MyClass.MyEnum>, s) :?> MyClass.MyEnumhttps://stackoverflow.com/questions/26573318
复制相似问题