String representation of an Enum

后端 未结 30 1958
不思量自难忘°
不思量自难忘° 2020-11-22 02:44

I have the following enumeration:

public enum AuthenticationMethod
{
    FORMS = 1,
    WINDOWSAUTHENTICATION = 2,
    SINGLESIGNON = 3
}

T

30条回答
  •  悲&欢浪女
    2020-11-22 03:27

    I really like Jakub Šturc's answer, but it's shortcoming is that you cannot use it with a switch-case statement. Here's a slightly modified version of his answer that can be used with a switch statement:

    public sealed class AuthenticationMethod
    {
        #region This code never needs to change.
        private readonly string _name;
        public readonly Values Value;
    
        private AuthenticationMethod(Values value, String name){
            this._name = name;
            this.Value = value;
        }
    
        public override String ToString(){
            return _name;
        }
        #endregion
    
        public enum Values
        {
            Forms = 1,
            Windows = 2,
            SSN = 3
        }
    
        public static readonly AuthenticationMethod FORMS = new AuthenticationMethod (Values.Forms, "FORMS");
        public static readonly AuthenticationMethod WINDOWSAUTHENTICATION = new AuthenticationMethod (Values.Windows, "WINDOWS");
        public static readonly AuthenticationMethod SINGLESIGNON = new AuthenticationMethod (Values.SSN, "SSN");
    }
    

    So you get all of the benefits of Jakub Šturc's answer, plus we can use it with a switch statement like so:

    var authenticationMethodVariable = AuthenticationMethod.FORMS;  // Set the "enum" value we want to use.
    var methodName = authenticationMethodVariable.ToString();       // Get the user-friendly "name" of the "enum" value.
    
    // Perform logic based on which "enum" value was chosen.
    switch (authenticationMethodVariable.Value)
    {
        case authenticationMethodVariable.Values.Forms: // Do something
            break;
        case authenticationMethodVariable.Values.Windows: // Do something
            break;
        case authenticationMethodVariable.Values.SSN: // Do something
            break;      
    }
    

提交回复
热议问题