在c#中,计算“趋势”最简单的方法是什么?给定当前和以前的状态

本文关键字:状态 是什么 方法 计算 趋势 最简单 | 更新日期: 2023-09-27 17:53:05

我有一个变量来显示项目上的RAG状态(Red, Amber, Green)

var previousStatus = "R"
var currentStatus = "A"

,我想计算"趋势",所以像

  var trend = CalculateTrend(previous, current)

我试图找到一个比

更优雅的解决方案
            if (prev == current)
            return "Stable";
         if (prev == "R" && (current == "G" ||current == "A"))
              return "Improving";
         if (prev == "G" && (current == "R" ||current == "A"))
              return "Declining";
        if (prev == "A" && current == "G")
            return "Improving";
        if (prev == "A" && current == "R")
            return "Declining";

有什么"更干净"的解决方案吗

在c#中,计算“趋势”最简单的方法是什么?给定当前和以前的状态

为每个状态创建一个整数值的enum

public enum Status
{
    Red = 1,
    Amber = 2,
    Green = 3           
}

则采用int.CompareTo法。

switch(previous.CompareTo(current))
{
    case -1:
        return "Improving";
    case 0:
        return "Stable";
    case 1:
        return "Declining";
}

使用数字系统。用等效数值对值进行评级。然后你可以用数学

如果你只是想避免使用If语句,你可以创建一个简单的查找字典:

private static string GetTrend(string prev, string cur)
{
    var trends = new Dictionary<string, string[]>()
    {
        {"Stable",    new[] {"AA", "RR", "GG"}},
        {"Improving", new[] {"RG", "RA", "AG"}},
        {"Declining", new[] {"GA", "GR", "AR"}},
    };
    return trends.Single(x => x.Value.Contains(prev + cur)).Key;
}