2015-03-06 2 views
-1

Любой знает, как это сделать.C# тройной оператор Оператор списка

label1.Text = Cclass.TestMe() 
        .Where(t => t.GFName == (textBox1.Text == "" 
               ? "GName" 
               : textBox1.Text)) 
        .First() 
        .GFName == null ? 
       "Nothing" : 
       "Super"; 

Я пытался проверить, что List пуст, возвратите что-то. Таким образом, компилятор не будет генерировать исключение или неподтвержденную ошибку.

+0

И какая у вас проблема с этим кодом? – Servy

+4

Не все должно быть сделано в одном заявлении .... – TyCobb

ответ

1

Причина этого исключением является First(). Он выдает исключение, если нет строки, которую нужно вернуть. Вместо этого вы можете использовать FirstOrDefault(), который вернет значение по умолчанию (NULL для всех ссылочных типов). Но если вы хотите, чтобы проверить, есть ли элемент в списке, который mathcing состояния, то вы должны использовать Any() метод расширения:

return Cclass.TestMe() 
       .Any(t => t.GFName == (textBox1.Text == "" ? "GName" : textBox1.Text)) ? 
     "Super" : 
     "Nothing"; 

Кстати, было бы лучше, чтобы установить текст за пределами вашего запроса:

var filteredText = textBox1.Text == "" ? "GName" : textBox1.Text; 
return Cclass.TestMe().Any(t => t.GFName == filteredText) ? 
      "Super" : 
      "Nothing"; 
+1

Извините, предназначенный для редактирования моего собственного сообщения и ударил вашу ошибку ... –

+0

@DStanley Да, я guees, что)) –

+0

Спасибо, я получил его на работу , @DStanley. Я просто практикую Тернар, и вы правы, легко выполнить несколько строк, чтобы проверить код. Но я знаю, что есть способ сделать это, и здесь, в Stack Exchange, я знаю, что многие кодеры здесь чувствуют то же самое, чтобы обновлять свои знания всеми возможными способами. Спасибо Farhad за подробное объяснение первого FOD и любого метода. Получил его на работу и теперь читал связанные с ними методы: D – Aizen

0

Если я правильно понял, вы хотите вернуть одно значение, если предложение where возвращает что-то, а другое, если нет. Это было бы:

label1.Text = Cclass.TestMe() 
        .Any(t => t.GFName == (textBox1.Text == "" 
               ? "GName" 
               : textBox1.Text)) ? 
       "Super" : 
       "Nothing"; 

Если это не то, что вы хотите, а затем изменить код, чтобы использовать if заявления, чтобы сделать его работы, а затем сделать его лучше. Уродливый рабочий код всегда лучше, чем элегантный сломанный код.

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