C# 列挙型 - 値を比較する方法 質問する

C# 列挙型 - 値を比較する方法 質問する

この列挙型の値を比較するにはどうすればいいでしょうか

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

いずれの場合も、オブジェクトのインスタンスに設定されていないオブジェクト参照が取得されます。

ベストアンサー1

これを使って

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

AccountType 列挙型から int を取得して比較する場合 (理由はわかりません)、次のようにします。

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

Objet reference not set to an instance of an object例外はあなたのユーザープロファイルがヌルそして、null のプロパティが取得されます。なぜ設定されていないのかをデバッグで確認してください。

編集 (@Rik と @KonradMorawski に感謝) :

事前にいくつか確認しておくといいかもしれません:

if(userProfile!=null)
{
}

または

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

おすすめ記事