Given this enum
public enum UserStatus : byte
{
Approved = 1,
Locked = 2,
Expire = 3
}
why does this check always return false when usr.Status = 1
if(usr.Status.Equals(UserStatus.Approved))
return true;
return false;
The comparison seems to work - there is no compile time error or runtime exception. Please note I am not the author of this piece of code and would like to find out why the author chose enum of type byte
and why this doesn't work as it should.
How to compare Enum values in C#? Enum. CompareTo(Object) Method is used to compare the current instance to a specified object and returns an indication of their relative values.
The enum can be of any numeric data type such as byte, sbyte, short, ushort, int, uint, long, or ulong. However, an enum cannot be a string type.
The size of an enum is compiler-specific and should default to the smallest integral type which is large enough to fit all of the values, but not larger than int. In this case, it seems the sizeof enum is fixed at 16-bit.
Because you will have to cast.
The equals method will check if UserStatus
is an int
(depending on the type you have defined at the property usr.Status
). It will then return that is not (it is of type UserStatus
) thus return false
Better code would be:
return usr.Status == (int)UserStatus.Approved;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With