F#HashCode枚举转换

use*_*285 0 error-handling enums f# hashcode bitmask

我有一个带掩码的错误代码的枚举,带有字符串表示和二进制int表示:

type ErrorCodes = 
    | NoError = 0
    | InvalidInputError = 1
    | AuthenticationFailedError = 2
    | InvalidArgumentError = 4
    | ItemNotFoundError = 8
    | UnknownError = 16
Run Code Online (Sandbox Code Playgroud)

当我浏览程序时,我使用按位OR运算符(|||)收集所有错误.所以现在我有一些看起来像01100的东西.如何打印到控制台:"InvalidArgumentError"和"ItemNotFoundError?"

我只想使用:

for i = 0 to 32 do
    if ((err.GetHashCode() % 2) = 1) then
        Console.WriteLine("ErrorCode: {0}",err.GetHashCode())
Run Code Online (Sandbox Code Playgroud)

但现在我仍然坚持如何打印实际的字符串

Lea*_*and 5

如果ErrorCodes使用System.Flags属性修饰类型,.ToString则将格式化为值名称列表.

[<System.Flags>]
type ErrorCodes = ...

let errors = ErrorCodes.InvalidInputError ||| ErrorCodes.UnknownError

printfn "%O" errors
Run Code Online (Sandbox Code Playgroud)