2014-10-23 2 views
0

Как я могу это написать?Простой, если затем еще использовать? :

match = p.PType.Type == EPType.Umbr 
         ? matchShouldBeThis 
         : (p.IsShare == true ? matchShouldBeThisInstead); 

Компилятор жалуется, что хочет другой:

В основном сво я тогда еще если

+0

Используйте ваниль, если/другое? –

+3

В C# нет оператора '?'. Есть '??' и '?:' Что вы хотите с 'p.IsShare == true? «Изначально»? –

+0

Для этого я, скорее всего, придерживаюсь класса if/else для удобочитаемости. – DavidG

ответ

2

Это помогает напишите свой код wi thout, тогда посмотрите, можно ли «упростить», используя ?:.

Кажется, что вы хотите, когда _Iwantthisinsteadwantp.PType.Type == EPType.Umbrиp.IsShare == true, в противном случае вы хотите thisone.

Это станет:

if (p.PType.Type == EPType.Umbr && p.IsShare) 
{ 
    match = _Iwantthisinsteadwant; 
} 
else 
{ 
    match = thisOne; 
} 

Это может быть сокращено до:

match = (p.PType.Type == EPType.Umbr && p.IsShare) 
    ? _Iwantthisinstead 
    : thisOne; 
+0

'== true' всегда избыточно. – Rik

+0

@Rik Ну, я всегда предпочитаю использовать 'p.IsShare' вместо' p.IsShare == true', но я не мог назвать это как _redundant_ ':)'. Это полностью вопрос вкуса. Например, вы можете увидеть много использования '== true' в исходном коде .NET Framework. Для начинающего программиста 'p.IsShare == true', по-моему, более читабельна, понятна, чем' p.IsShare'. –

+0

@ SonerGönül Ну, это всегда избыточно в семантическом смысле. Это помогает только в удобочитаемости, когда неясно, что вы имеете дело с булевым, и в этом случае я бы сказал, что это будет проблемой для решения. – Rik

0

Ваше второе условие отсутствует false part

match = p.PType.Type == EPType.Umbr ? thisOne : (p.IsShare ? _Iwantthisinstead : false);

+1

не возвращает ли значение false в переменную соответствия? – user3437721

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