如何比较此枚举的值
public enum AccountType
{
Retailer = 1,
Customer = 2,
Manager = 3,
Employee = 4
}
我试图在MVC4控制器中比较这个枚举的值,如下所示:
if (userProfile.AccountType.ToString() == "Retailer")
{
return RedirectToAction("Create", "Retailer");
}
return RedirectToAction("Index", "Home");
我也试过这个
if (userProfile.AccountType.Equals(1))
{
return RedirectToAction("Create", "Retailer");
}
return RedirectToAction("Index", "Home");
在每种情况下,我都会将Object引用设置为未设置为对象的实例。
答案 0 :(得分:37)
使用此
if (userProfile.AccountType == AccountType.Retailer)
{
...
}
如果你想从你的AccountType枚举中获取int并进行比较(不知道原因),请执行以下操作:
if((int)userProfile.AccountType == 1)
{
...
}
Objet reference not set to an instance of an object
异常是因为您的userProfile是 null ,并且您获得的属性为null。检查调试为什么没有设置。
也许你以前可以做一些检查:
if(userProfile!=null)
{
}
或
if(userProfile==null)
{
throw new ArgumentNullException(nameof(userProfile)); // or any other exception
}
答案 1 :(得分:7)
比较
if (userProfile.AccountType == AccountType.Retailer)
{
//your code
}
如果要阻止 NullPointerException ,您可以在比较 AccountType 之前添加以下条件:
if(userProfile != null)
{
if (userProfile.AccountType == AccountType.Retailer)
{
//your code
}
}
或更短的版本:
if (userProfile !=null && userProfile.AccountType == AccountType.Retailer)
{
//your code
}
答案 2 :(得分:7)
如果是字符串
,您可以使用Enum.Parse
之类的内容
AccountType account = (AccountType)Enum.Parse(typeof(AccountType), "Retailer")
答案 3 :(得分:5)
您可以使用扩展方法以较少的代码执行相同的操作。
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;
}
}
使用:
if (userProfile.AccountType.isRetailer())
{
//your code
}
我建议将AccountType
重命名为Account
。 It's not a name convention
答案 4 :(得分:0)
在比较之前,您应该将字符串转换为枚举值。
Enum.TryParse("Retailer", out AccountType accountType);
然后
if (userProfile?.AccountType == accountType)
{
//your code
}