2016-09-28 9 views
0

У меня есть условиедополнительное состояние внутри тернарный оператор возможно?

 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) строка содержит возраст и гендер;

Я хочу знать в том же коде, что и выше, мне нужно внести некоторые изменения, у меня есть два флажка?

если age == true; то только строка должна содержать возраст. если пол == false строка не должна содержать пол.

можно ли поставить это условие в первую строку кода?

Каков наилучший и менее закодированный способ его реализации?

+9

_ «какой лучший и менее закодированный способ реализовать это?» _ Лучший способ - не всегда всегда писать код как можно короче, и попытайтесь поместить все это в одну строку. Напишите код, который легко понять и поддерживать. –

+1

Не забывайте - легко для * других * понять и поддерживать тоже :) – Charleh

+0

Логика на самом деле не ясна. Ваш условный оператор просто проверяет, равен ли протокол null или 5, а затем возвращает все поля (не только возраст и пол, как указано), в противном случае он возвращает «Идентификатор пациента», «. Имеет ли это смысл? –

ответ

1

Вы могли бы также сохранить его простым и разделить его на две части:

  1. Создать список столбцов, которые вы хотите
  2. Преобразование списка в строку, разделенную запятыми

Да, это длиннее и использует немного больше памяти. Но также легче увидеть, что он делает, и изменить логику в будущем:

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); 
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(','); 

добавить столько, сколько, если вы хотите. Использование тернарного оператора сделает его сложным.

+0

не могли бы вы объяснить? думаю, что у меня есть флаг для каждого элемента в строке, если соответствующий флаг является истинным, он должен показать, что в противном случае он не должен показывать это. поэтому для каждого элемента я должен проверить condition.like dob, age, height, ..etc все имеют соответствующие флаги. –

+0

http://rextester.com/FLD80835 не работает –

+0

его возраст возврата, потому что boolean age = true. ты хочешь управлять им по-другому? –

Смежные вопросы