【问题标题】:How do I split a line of code into two using switch in c# [closed]如何在c#中使用switch将一行代码分成两行[关闭]
【发布时间】:2023-03-03 16:33:02
【问题描述】:

我有这行代码

acctStatusLabel.Text = acct.acctStatusCode == "APPR" || acct.acctStatusCode == "IACT"
                                       ? "Inactive"
                                       : "Closed";

我需要做的是更改它,使 APPR 状态代码显示“已批准”,而 IACT 状态代码显示“非活动”

这是完整的代码集

if (acct.acctStatusCode == "DORM")
            acctStatusLabel.Text = "Dormant";
        else
            acctStatusLabel.Text = acct.acctStatusCode == "APPR" || acct.acctStatusCode == "IACT"
                                       ? "Inactive"
                                       : "Closed";

【问题讨论】:

标签: c# split


【解决方案1】:

像这样?

switch(acct.acctStatusCode)
{
    case "DORM":
        acctStatusLabel.Text = "Dormant";
        break;
    case "APPR":
        acctStatusLabel.Text = "Approved";
        break;
    case "IACT":
        acctStatusLabel.Text = "Inactive";
        break;
    default:
        acctStatusLabel.Text = "Closed";
        break;
}

更好的选择可能是使用静态字典:

{somewhere else}
private static Dictionary<string, string> Codes = new Dictionary<string, string>();

{in static constructor}
Codes.Add("DORM","Dormant");
Codes.Add("APPR","Approved");
Codes.Add("IACT","Inactive");

您的代码将类似于:

// set default value
acctStatusLabel.Text = "Closed";
// lookup decoded value
if(Codes.ContainsKey(code))
    acctStatusLabel.Text = Codes[code];

更好的方法是将代码/解码放在数据库表或其他无需重新编译应用即可更改的数据源中。

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

这应该可以解决问题:

switch (acct.acctStatusCode)
{
    case "DORM":
        acctStatusLabel.Text = "Dormant";
        break;
    case "APPR":
        acctStatusLabel.Text = "Approved";
        break;
    case "IACT":
        acctStatusLabel.Text = "Inactive";
        break;
    default:
        acctStatusLabel.Text = "Closed";
}

但是,最好将该逻辑移入acct 对象本身。像这样的:

public string StatusCodeText
{
    get
    {
        switch (acctStatusCode)
        {
            case "DORM":
                return "Dormant";
            case "APPR":
                return "Approved";
            case "IACT":
                return "Inactive";
        }
        return "Closed";
    }
}

然后使用起来就简单多了:

acctStatusLabel.Text = acct.StatusCodeText;

“智能数据结构和愚蠢的代码比其他方式工作得更好。” - 埃里克·S·雷蒙德

【讨论】:

    【解决方案3】:
    switch(acct.acctStatusCode)
    {
        case "DORM":
            acctStatusLabel.Text = "Dormant";
            break;
        case "APPR":
        case "IACT":
            acctStatusLabel.Text = "Inactive";
            break;
        default:
            acctStatusLabel.Text = "Closed";
            break;
    }
    

    【讨论】:

      【解决方案4】:

      类似的东西

      switch(acct.acctStatusCode) {
          case "DORM" : acctStatusLabel.Text = "Dormant"; break;
          case "APPR" : case "IACT" : acctStatusLabel.Text = "Inactive"; break;
          default : acctStatusLabel.Text = "Closed"; break;
      }
      

      【讨论】:

        【解决方案5】:

        只是做

        if status =="xxxx"
           text="XXXX"
        else if status == "yyy"
           text = "YYY"
        else 
           text = "QQQ"
        

        我知道这不是确切的代码。我的意思是我建议停止尝试用 ?和:等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-22
          • 1970-01-01
          • 1970-01-01
          • 2015-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多