2012-09-18 5 views
26

Я бы хотел сделать одну строку, если оператор с более чем 1 действием.Операция с одной строкой с двумя действиями

По умолчанию это:

(if) ? then : else 

userType = (user.Type == 0) ? "Admin" : "User"; 

Но я не нужен "другой" только мне нужна "еще, если"

как и в многоканальной линии:

if (user.Type == 0) 
    userType = "Admin" 
else if (user.Type == 1) 
    userType = "User" 
else if (user.Type == 2) 
    userType = "Employee" 

Есть ли возможность для этого в одной строке?

+0

Я думаю, что это может быть случай, когда 'enum' лучше, если некоторые из ваших API используют целые числа, а другие используют строки, могут быть аномалии обновления, если вы забудете обновить то, что означает каждая связь. – Matthew

ответ

63

Похоже, вы действительно хотите Dictionary<int, string> или, возможно, switch заявление ...

Вы можете сделать это с условным оператором, хотя:

userType = user.Type == 0 ? "Admin" 
     : user.Type == 1 ? "User" 
     : user.Type == 2 ? "Employee" 
     : "The default you didn't specify"; 

В то время как вы могли положить, что в в одной строке, я настоятельно призываю вас не делать этого.

Я бы обычно только сделал это для разных условий, хотя - не только несколько различных возможных значений, которые лучше обрабатываются на карте.

+0

Джон, это слишком много, я верю ... Зачем усложнять его дальше? (Кстати, я рад видеть, что вы проходите мимо того же вопроса, что и я :) –

+0

@ H2CO3: Какую версию вы говорите сложнее? Мы хотим сопоставить целое число со строкой - словарь кажется наиболее естественным для меня. –

+0

Я имею в виду словарь. Я чувствую, что это скорее «хорошая практика», которая вас поймала. Конечно, вы можете использовать словарь - но эй, вы могли бы использовать массив, чтобы индексы были типом пользователя (который действительно должен быть целыми целыми числами, возможно, перечислением), и для 3-х простых простых чисел тройной оператор не является это плохо! Лично я не чувствую, что это вообще нечитаемо. Оператор switch явно лучше (с моей точки зрения), если вы считаете '?:' Нечитаемым, я предпочел бы использовать 'switch'. –

6

может написать это в одной строке, но это не то, что кто-то сможет прочитать. Держите его так, как вы его уже написали, он уже красив сам по себе.

Если у вас слишком много if/else конструкции, вы можете подумать об использовании различных datastructures, как Dictionaries (для поиска ключей) или Collection (для запуска условных LINQ запросов на него)

16
userType = (user.Type == 0) ? "Admin" : (user.type == 1) ? "User" : "Admin"; 

должен сделать трюк.

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