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.
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
}
Vous pouvez utiliser Enum.Parse
like, s'il s'agit d'une chaîne
AccountType account = (AccountType)Enum.Parse(typeof(AccountType), "Retailer")
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
}
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 .
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
}