如何实现职级结构

如何实现职级结构

实施排名系统的最佳方法是什么:

这是我将使用的代码

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/

10-12 18:34