web-dev-qa-db-fra.com

C # Enum - Comment comparer la valeur

Comment puis-je comparer la valeur de cette énumération

public enum AccountType
{
    Retailer = 1,
    Customer = 2,
    Manager = 3,
    Employee = 4
}

J'essaie de comparer la valeur de cette énumération dans un contrôleur MVC4 comme ceci:

if (userProfile.AccountType.ToString() == "Retailer")
{
    return RedirectToAction("Create", "Retailer");
}
return RedirectToAction("Index", "Home");

J'ai aussi essayé ça

if (userProfile.AccountType.Equals(1))
{
    return RedirectToAction("Create", "Retailer");
}
return RedirectToAction("Index", "Home");

Dans chaque cas, je reçois une référence d'objet non définie sur une instance d'objet.

28
Val Okafor

utilisez ceci

if (userProfile.AccountType == AccountType.Retailer)
{
     ...
}

Si vous voulez obtenir l'int de votre énumération AccountType et le comparer (vous ne savez pas pourquoi), procédez comme suit:

if((int)userProfile.AccountType == 1)
{ 
     ...
}

Objet reference not set to an instance of an object exception est parce que votre profil utilisateur est null et que vous obtenez la propriété null. Vérifiez dans le débogage pourquoi il n'est pas défini.

EDIT (merci à @Rik et @KonradMorawski):

Peut-être que vous pouvez faire quelques vérifications avant:

if(userProfile!=null)
{
}

ou

if(userProfile==null)
{
   throw new ArgumentNullException(nameof(userProfile)); // or any other exception
}
38
Kamil Budziewski

Vous pouvez utiliser Enum.Parse like, s'il s'agit d'une chaîne

AccountType account = (AccountType)Enum.Parse(typeof(AccountType), "Retailer")
8
Satpal

Comparaison:

if (userProfile.AccountType == AccountType.Retailer)
{
    //your code
}

Dans le cas d'empêcher NullPointerException, vous pouvez ajouter la condition suivante avant de comparer Type de compte:

if(userProfile != null)
{
    if (userProfile.AccountType == AccountType.Retailer)
    {
       //your code
    }
}

ou version plus courte:

if (userProfile !=null && userProfile.AccountType == AccountType.Retailer)
{
    //your code
}
7
Tafari

Vous pouvez utiliser des méthodes d'extension pour faire la même chose avec moins de code.

public enum AccountType
{
    Retailer = 1,
    Customer = 2,
    Manager = 3,
    Employee = 4
}

static class AccountTypeMethods
{
    public static bool IsRetailer(this AccountType ac)
    {
        return ac == AccountType.Retailer;
    }
}

Et à utiliser:

if (userProfile.AccountType.isRetailer())
{
    //your code
}

Je recommanderais de renommer le AccountType en Account. Ce n'est pas une convention de nom .

5
Dherik

Vous devez convertir la chaîne en une valeur d'énumération avant de comparer.

Enum.TryParse("Retailer", out AccountType accountType);

Ensuite

if (userProfile?.AccountType == accountType)
{
    //your code
}
0
Ayberk