enums - F#等效于Enum.TryParse

标签 enums f# tryparse

在C#中,以下代码有效:

MyEnum myEnum = MyEnum.DEFAULT;
if (Enum.TryParse<MyEnum>(string, out myEnum))
{
    Console.WriteLine("Success!");
}

所以我想我会在F#中使用它。这是我的尝试:
let mutable myEnum = MyEnum.DEFAULT
if Enum.TryParse<MyEnum>(string, &myEnum) then
    printfn "Success!"

但它提示
a generic construct requires that the type 'MyEnum' have a default constructor
这到底是什么意思?

最佳答案

如果您尝试使用Enum.TryParse解析已区分的并集值,这是编译器会给您的一条无用的消息(如果在技术上正确)。

更准确地说,如果您看一下该函数,您会发现它使用限制为默认构造函数的值类型的类型进行了参数化。 DU都不满足这两个条件-这就是编译器所提示的。

与C#不同,在F#中定义枚举时,需要显式为每个标签赋予一个值:

type MyEnum = 
    | Default = 0
    | Custom = 1
    | Fancy = 2

跳过这些值将使编译器将类型解释为有区别的联合,这是非常不同的野兽。

关于enums - F#等效于Enum.TryParse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489599/

相关文章:

c# - IValueConverter 和模拟数据

c - 将 typedef 枚举初始化为字符串

c# - LINQ 查询中的 Decimal.TryParse - 如何使用 out 参数并避免二次转换

algorithm - 我可以更有效地找到给定大小的所有多重集吗?

algorithm - 寻找算法来寻找参数以满足给定函数的返回

C#字符串转数字,Parse失败时TryParse返回true

c# - Datetime.TryParse 无法解析 yyyy/MM/dd 格式

c++ - 使用枚举编译时多态性

枚举可以被认为是不安全的吗?

f# - 接口(interface)与功能记录