2012-06-21 2 views
1

Есть ли лучший способ написать ниже, используя Linq.linq проверить строковое значение

нужно проверить, если возвращаемое значение по BOOL является истинным и ложным

string checkvalue = nodeIterator.Current.Value.ToString(); 
if (checkvalue == "true") 
{ 
    taxSpecification = 3; 
} 
else if (checkvalue == "false") 
{ 
    taxSpecification = 3; 
} 
+0

Всегда ли это bool? Я имею в виду, что единственными приемлемыми значениями являются «true» и «false» – Jupaol

+0

Действительно ли taxSpecification всегда будет 3? Ваш код читается нормально, но вы можете использовать трехъядерный/условный (? :) оператор, например, если вы хотите уменьшить строки кода. Вы уверены, что nodeIterator.Current.Value всегда будет не нулевым? Linq был бы более полезен, если бы мы могли видеть структуру, которую вы итерируете. – dash

+3

Собственно, это типично, не так ли. Независимо от того, что происходит, налог постоянный ;-) – dash

ответ

0

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

bool myBool; 
if (!bool.TryParse(checkvalue, out myBool) 
    throw new Exception("This is not a valid bool"); 
... 

Если вы хотите получить более общий подход (т.е. строка может быть недействительным значением TryParse):

if(new[] {"true", "false"}.Contains(checkvalue)) 
    taxSpecification = 3; 

На самом деле это не касается части Linq но может помочь в теле цикла.

0

Попробуйте

 var checkvalue = "false"; 
     bool myRes = false; 
     int tax = 0; 

     if (bool.TryParse(checkvalue, out myRes)) 
     { 
      tax = (myRes) ? 3 : 4; 
     } 
0

Там нет Linq, но вы можете написать его как

if (checkvalue == "true" || checkvalue == "false") 
{ 
    taxSpecification = 3; 
}else 
{ 
    // wrong input 
} 
0

Зачем использовать LINQ или некоторые фантазии вещь, когда простой .Net 2.0 логика будет достаточно

switch (nodeIterator.Current.Value.ToString()) 
{ 
    case "true": 
    case "false": 
     taxSpecification = 3; 
    break; 
} 
Смежные вопросы