41

我如何比较这个枚举的值

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");

在每种情况下,我都会得到一个未设置为对象实例的对象引用。

4

5 回答 5

62

用这个

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 的属性。检查调试为什么它没有设置。

编辑(感谢@Rik 和@KonradMorawski):

也许你可以先做一些检查:

if(userProfile!=null)
{
}

或者

if(userProfile==null)
{
   throw new ArgumentNullException(nameof(userProfile)); // or any other exception
}
于 2013-10-23T08:51:20.203 回答
10

你可以使用Enum.Parselike,如果它是字符串

AccountType account = (AccountType)Enum.Parse(typeof(AccountType), "Retailer")
于 2013-10-23T08:53:00.497 回答
8

比较:

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
}
于 2013-10-23T08:52:28.477 回答
8

您可以使用扩展方法用更少的代码做同样的事情。

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
}

我建议将其重命名AccountTypeAccount. 这不是名称约定

于 2015-02-14T14:39:57.757 回答
1

您应该在比较之前将字符串转换为枚举值。

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

然后

if (userProfile?.AccountType == accountType)
{
    //your code
}
于 2019-03-12T08:57:54.610 回答