I have the following enum defined. I have used underscores as this enum is used in logging and i don’t want to incur the overhead of reflection by using custom attribute.We use very heavy logging. Now requirement is to change “LoginFailed_InvalidAttempt1” to “LoginFailed Attempt1”. If i change this enum, i will have to change its value across application. I can replace underscore by a space inside logging SP. Is there any way by which i can change this without affecting whole application.Please suggest.
public enum ActionType
{
None,
Created,
Modified,
Activated,
Inactivated,
Deleted,
Login,
Logout,
ChangePassword,
ResetPassword,
InvalidPassword,
LoginFailed_LockedAccount,
LoginFailed_InActiveAccount,
LoginFailed_ExpiredAccount,
ForgotPassword,
LoginFailed_LockedAccount_InvalidAttempts,
LoginFailed_InvalidAttempt1,
LoginFailed_InvalidAttempt2,
LoginFailed_InvalidAttempt3,
ForgotPassword_InvalidAttempt1,
ForgotPassword_InvalidAttempt2,
ForgotPassword_InvalidAttempt3,
SessionTimeOut,
ForgotPassword_LockedAccount,
LockedAccount,
ReLogin,
ChangePassword_Due_To_Expiration,
ChangePassword_AutoExpired
}
The best way to do it will be with a Description attribute. I understand that you don’t use reflection, but you can always cache the result so it only happens once?
Add the description attribute:
Then when displaying the text value of the enum, you can get the description out using the following bit of code:
As you can see from the code above, the reflection is only done once. Any subsequent calls on the same Enum value will return the result from a
Dictionarywhich is lightning fast.