gpt4 book ai didi

string - F# 字符串到枚举的转换

转载 作者:行者123 更新时间:2023-12-02 09:32:52 25 4
gpt4 key购买 nike

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

public enum MyEnum {
ValueA,
ValueB,
ValueC}

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

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

...给我类型名称和/或对象构造函数的无效使用。如果需要,请使用“new”并将构造函数应用于其参数...错误。如果我使用 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))

...给我该值不是函数,无法应用错误。
我用MyEnum我的 F# 代码的其他部分很好,所以我猜我的 C#.NET DLL 没有问题。

并避免一些可能出现的问题:-)

  • 我需要将字符串转换为枚举,因为某些 MyEnum值是使用 .ToString() 序列化为 XML和反序列化的枚举来自 XML 的数据将作为参数传递给 F# 函数
  • 使用int相当于 MyEnum写入和读取XML 是不需要的,因为 XML 应该是人类可读的,而且它更有可能用于 int相当于 MyClass.ToString() 相比要更改的值.

最佳答案

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

在 F# 中,您可以按如下方式进行向下转换:

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

关于string - F# 字符串到枚举的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26573318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com