Question: 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.

Answer: 
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;

```
That is because the `Usr.Status` contains an Integer and the `UserStatus.Approved` returns an String i.e., `Approved`. So, an integer of value `1` can not be equal to the String `Approved`. So, you must convert the Enum status also to an integer by the following code

```
if (usr.Status == (int)(UserStatus.Approved))
                return true;
       return false;

```