Я бы начал с преобразования ваших уровней в одно перечисление. Значение каждого Enum может быть минимальным значением, нет необходимости отслеживать максимум, как вы увидите ниже.
public enum Level
{
[Description("Private")]
One = 0,
[Description("PV2")]
Two = 200,
[Description("Private Fist Class")]
Three = 300,
...
...
[Description("Sergeant Major of the Answers")]
Ten = 10000
}
Тогда вы можете написать это, чтобы получить имя:
string GetRankName(Level level)
{
FieldInfo fieldInfo = level.GetType().GetField(level.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
return (attributes.Length > 0) ? attributes[0].Description : level.ToString();
}
и это, чтобы получить уровень
Level GetLevel(int points)
{
Level level = Level.One;
foreach(int i in Enum.GetValues(typeof(Level)))
{
if (points < i) break;
level = (Level)i;
}
return level;
}
тогда члены вашего объекта будут:
public Level Level { get; set; }
public string RankName { get; set; }
public MyRank(int points)
{
Level = GetLevel(points);
RankName = GetRankName(Level);
}