在c#中使用枚举类型键表示相同的值

时间:2013-03-10 01:34:24

标签: c# enums

如何在c#应用程序中将2个值关联到单个enum类型值? 例如,我有enum这样的类型:

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

足球运动员和网球运动员都是运动员,但教练不是运动员。

如果我是一个人,就像这样:

person p = person.soccerPlayer;

我该如何进行此测试?

if (p == person.athlete)

1 个答案:

答案 0 :(得分:2)

在这种特殊情况下,通过功能检查以查看enum值是否为运动员,您可以获得更好的服务

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

总的来说,虽然我不相信enum类型对你很好。 enum通常用于表示互斥值(可以是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
  }      
}