实施排名系统的最佳方法是什么:
这是我将使用的代码
public class MyRank
{
private int LevelOneMaxPoints = 100;
private int LevelTwoMinPoints = 200;
private int LevelTwoMaxPoints = 299;
private int LevelThreeMinPoints = 300;
private int LevelThreeMaxPoints = 399;
private int LevelFourMinPoints = 400;
private int LevelFourMaxPoints = 599;
private int LevelFourPlusMinPoints = 600;
private int LevelFourPlusMaxPoints = 999;
private int LevelFiveMinPoints = 1000;
private int LevelFiveMaxPoints = 1299;
private int LevelSixMinPoints = 1300;
private int LevelSixMaxPoints = 2699;
private int LevelSevenMinPoints = 2700;
private int LevelSevenMaxPoints = 3999;
private int LevelEightMinPoints = 4000;
private int LevelEightMaxPoints = 5499;
private int LevelEightPlusMinPoints = 5500;
private int LevelEightPlusMaxPoints = 7499;
private int LevelNineMinPoints = 7500;
private int LevelNineMaxPoints = 9999;
private int LevelTenMinPoints = 10000;
private string LevelOneName = "Private";
private string LevelTwoName = "PV2";
private string LevelThreeName = "Private Fist Class";
private string LevelFourName = "Specialist";
private string LevelFourPlusName = "Corporal";
private string LevelFiveName = "Sergeant";
//private string LevelSixName = "Staff Sergeant";
private string LevelSevenName = "Sergeant First Class";
private string LevelEightName = "Master Sergeant";
private string LevelEightPlusName = "First Sergeant";
private string LevelNineName = "Sergeant Major";
//private string LevelTenName = "Sergeant Major of the Answers";
private int points = 0;
public string RankName { get; private set; }
public MyRank(int points)
{
this.points = points;
RankName = GetRankName();
}
private string GetRankName()
{
if (points >= Int32.MinValue && points <= LevelOneMaxPoints)
return LevelOneName;
else if (points >= LevelTwoMinPoints && points <= LevelTwoMaxPoints)
return LevelTwoName;
else if (points >= LevelThreeMinPoints && points <= LevelThreeMaxPoints)
return LevelThreeName;
else if (points >= LevelFourMinPoints && points <= LevelFourMaxPoints)
return LevelFourName;
else if (points >= LevelFourPlusMinPoints && points <= LevelFourPlusMaxPoints)
return LevelFourPlusName;
else if (points >= LevelFiveMinPoints && points <= LevelFiveMaxPoints)
return LevelFiveName;
else if (points >= LevelSixMinPoints && points <= LevelSixMaxPoints)
return LevelFiveName;
else if (points >= LevelSevenMinPoints && points <= LevelSevenMaxPoints)
return LevelSevenName;
else if (points >= LevelEightMinPoints && points <= LevelEightMaxPoints)
return LevelEightName;
else if (points >= LevelEightPlusMinPoints && points <= LevelEightPlusMaxPoints)
return LevelEightPlusName;
else if (points >= LevelNineMinPoints && points <= LevelNineMaxPoints)
return LevelNineName;
else if (points >= LevelNineMinPoints && points <= LevelNineMaxPoints)
return LevelNineName;
else if (points >= LevelTenMinPoints)
return LevelFourName;
else
return "No Rank";
}
}
您认为这是最有效的方法吗?
最佳答案
我将从将您的Levels转换为单个枚举开始。每个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);
}
关于c# - 如何实现职级结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3047143/