0

enumac# アプリケーションで2 つの値を単一の型の値に関連付けるにはどうすればよいですか? たとえば、次のenumようなタイプがあります。

public enum person 
{ 
    soccerPlayer, 
    tennisPlayer, 
    athlete, 
    coach
}

サッカー選手やテニス選手はアスリートですが、コーチはアスリートではありません。

私が人をインスタンス化すると、次のようになります。

person p = person.soccerPlayer;

このテストを行うにはどうすればよいですか?

if (p == person.athlete)
4

1 に答える 1

2

enumこの特定のケースでは、値がアスリートであるかどうかを確認する関数チェックを行うことで、より適切にサービスを提供できます。

static bool IsAthlete(person p) { 
  switch (p) { 
    case person.soccerPlayer:
    case person.tennisPlayer:
    case person.athlete:
      return true;
    default:
      return false;
  }
}

全体的には、タイプがここでうまく機能するとは思いませんenum。Anenumは通常、相互に排他的な値 (A または B であるが両方ではない) を表すため、またはビット フラグの状況で使用されます。ここでビットフラグを操作して動作させることもできますが、それは最善の方法ではないように感じます。

これは、本格的なタイプよりも適していると思われるタイプの状況です。

class Person { 
  public bool IsAthlete { get; private set; } 
  public bool IsSoccerPlayer { get; private set; } 
  public bool IsTennisPlayer { get; private set; }

  public static readonly TennisPlayer = new Person { 
    IsTennisPlayer = true, 
    IsAthelete = true
  }

  public static readonly SoccerPlayer = new Person { 
    IsSoccerPlayer = true, 
    IsAthelete = true
  }      
}
于 2013-03-10T01:38:14.690 に答える