三元运算符内的额外条件可能吗?

时间:2016-09-28 09:16:30

标签: c#

我有条件

        string columns = (protocol == null || protocol == 5) ? "Patient Id,Patient Initial,DOB,Age,Height,Weight,BMI,Occupation,Nationality,Education,Race,Gender,MaritalStatus," : "Patient Id,";

所以它基本上设置了一个字符串。

这里我只检查protocolt类型和设置字符串,如上面的代码,

我没有一些旗帜

  var age=false;
  var gender=false;

通常,如果条件为真(protocl = 5),则该字符串包含年龄和性别;

我想知道上面显示的相同代码,我需要做一些更改,我有两个标志吗?

如果年龄== true;那么只有字符串应该包含年龄。 如果gender == false,则字符串不应包含性别。

是否可以将此条件检查放在第一行代码中?

实现该方法的最佳和编码方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以保持简单并将其分为两部分:

  1. 创建所需列的列表
  2. 将列表转换为逗号分隔的字符串
  3. 是的,它更长,使用更多的内存。但它也更容易看到它正在做什么,并在未来改变逻辑:

    int? protocol = 5;
    var age = false;
    var gender = false;
    
    var columnList = new List<string>();
    columnList.Add("Patient Id");
    
    if (protocol == null || protocol == 5)
    {
        columnList.Add("Patient Initial");
        columnList.Add("DOB");
    
        if (age)
        {
            columnList.Add("Age");
        }
    
        columnList.Add("Height");
        columnList.Add("Weight");
        columnList.Add("BMI");
        columnList.Add("Occupation");
        columnList.Add("Nationality");
        columnList.Add("Education");
        columnList.Add("Race");
    
        if (gender)
        {
            columnList.Add("Gender");
        }
    
        columnList.Add("MaritalStatus");
    }
    
    string columns = string.Join(",", columnList);
    

答案 1 :(得分:0)

使用

int? protocol = 5;
        bool age = true;
        var gender = true;
        string columns = "";
        if (protocol == 5)
        {
            columns += "Patient Id,";
        }

        if (age)
        {
            columns += "Age,";
        }

        if (gender)
        {
            columns += "Gender,";

        }
        columns += columns.TrimEnd(',');

根据需要添加任意数量。使用三元运算符会使其变得复杂。