Private value in C # flag enumeration

I am creating a flag enumeration in C # similar to the following:

    [Flags]
    public enum DriversLicenseFlags
    {
        None = 0,

        Suspended = 1 << 1,
        Revoked   = 1 << 2,

        Restored  = 1 << 3,
        SuspendedAndRestored = Suspended | Restored,
        RevokedAndRestored   = Revoked   | Restored,
    }

A few notes about my intentions here:

  • Suspendedand Revoked- these are unique states that can, but do not necessarily lead to recovery.
  • Restoredshould only be possible if the user was also Suspendedeither Revoked(or both). It is important to keep track of which event was the precursor to recovery.
  • The license can be both Suspended, and Revoked(and Restored)

In addition, I try to stick with the suggestions made at MSDN Designing Flag Enumerations . In particular:

  • Consider providing custom enumeration values ​​for commonly used flag combinations.
    • SuspendedAndRestored RevokedAndRestored .
  • , .
    • , Restored , Suspended Revoked.

, , Restored , - . , internal .

, , , :

  • Restored , API.

    , , , , . , , .

  • java- enum, , Restored internal static.

    , , - .

  • Restored , OR'ing . :.

    internal const int RestoredFlag = 1 << 3;
    [Flags]
    public enum DriversLicenseFlags
    {
        None = 0,
    
        Suspended = 1 << 1,
        Revoked   = 1 << 2,
    
        SuspendedAndRestored = Suspended | RestoredFlag,
        RevokedAndRestored   = Revoked   | RestoredFlag,
    }
    

, , , , .

+5
3

Flags ? , ?

public enum DriversLicenseStatus
{
    None = 0,
    Suspended,
    Revoked,
    SuspendedAndRestored,
    RevokedAndRestored,
}

, , DriversLicenseStatus "" .

- Flags , private enum DriversLicenseStatusFlags DriversLicenseStatus .

, , :

bool IsActive;

enum InactiveReason {
    None = 0,
    Suspended,
    Revoked,
}

"AndRestored" IsActive == true InactiveReason != InactiveReason.None.

, .:)

+2

3 , . , .NET , undefined, :

PrintDriversLicenseStatus(42);

... PrintDriversLicenseStatus DriversLicenseFlags.

, , .

: enum :

[Flags]
public enum DriversLicenseFlagsInternal
{
    None = 0,

    Suspended = 1 << 1,
    Revoked   = 1 << 2,

    Restored  = 1 << 3,
    SuspendedAndRestored = Suspended | Restored,
    RevokedAndRestored   = Revoked   | Restored,
}

[Flags]
internal enum DriversLicenseFlags
{
    None = DriversLicenseFlagsInternal.None,

    Suspended = DriversLicenseFlagsInternal.Suspended,
    Revoked   = DriversLicenseFlagsInternal.Revoked,

    SuspendedAndRestored = DriversLicenseFlagsInternal.SuspendedAndRestored,
    RevokedAndRestored   = DriversLicenseFlagsInternal.RevokedAndRestored,

}


public void DoSomething(DriversLicenseFlags arg)
{
    var argAsInternal = (DriversLicenseFlagsInternal) arg;
// or var argAsInternal = Util.CheckDefinedDriversLicense(arg);
}

, , .

+1

.

[Flags]
public enum DriversLicenseFlags {
    None,
    Suspended,
    Revoked,
    Restored
}

public bool Validate(DriversLicenseFlags flags) {
    if(flags.HasFlag(DriversLicenseFlags.Restored)) {
        return 
            flags.HasFlag(DriversLicenseFlags.Revoked) || 
            flags.HasFlag(DriversLicenseFlags.Suspended);

        // Or throw an exception
     }
     return true;
}

Microsoft. .

0

All Articles