RequireQualifiedAccess

使用 RequireQualifiedAccess 属性,union case 必须被称为 MyUnion.MyCase 而不仅仅是 MyCase。这可以防止封闭的命名空间或模块中的名称冲突:

type [<RequireQualifiedAccess>] Requirements =
    None | Single | All

// Uses the DU with qualified access
let noRequirements = Requirements.None

// Here, None still refers to the standard F# option case
let getNothing () = None

// Compiler error unless All has been defined elsewhere
let invalid = All

例如,如果 System 已经打开,则 Single 指的是 System.Single。与联合案件 Requirements.Single 没有冲突。