【问题标题】:F# string to enum conversionF# 字符串到枚举的转换
【发布时间】:2014-10-26 13:08:44
【问题描述】:

我在 C#.NET DLL 中的命名空间 MyNamespace 中的公共类 MyClass 中有以下枚举,我引用并从我的 F# 模块打开:

public enum MyEnum {
    ValueA,
    ValueB,
    ValueC}

我想在我的 F# 模块中将字符串 s 转换为其等效的 MyEnum(如果可能)。试图实现它...

let myEnumValue = (MyClass.MyEnum) (Enum.Parse(typedefof<MyClass.MyEnum>, s))

...给我类型名称和/或对象构造函数的使用无效。如有必要,请使用“new”并将构造函数应用于其参数...错误。如果我使用typeof&lt;MyClass.MyEnum&gt; 而不是typedefof&lt;MyClass.MyEnum&gt;,则相同。正在尝试...

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# 函数
  • 使用与MyEnum 等效的int 进行写入和读取 XML 是不可取的,因为 XML 应该是人类可读的,而且它更可能是 int 等效的 MyClass.ToString() 的值要更改。

【问题讨论】:

    标签: string enums f# type-conversion


    【解决方案1】:

    您的代码的问题在于您尝试将 Object(由 Parse 方法返回)转换为 MyClass.MyEnum 实例的方式。您尝试的语法导致“类型名称的无效使用”错误。

    在 F# 中,向下转换如下:

    let myEnumValue = Enum.Parse(typedefof<MyClass.MyEnum>, s) :?> MyClass.MyEnum
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      相关资源
      最近更新 更多