2013-04-02 4 views
5

То, что я в настоящее время:строка BOOL инлайн преобразование

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) && 
    Convert.ToBoolean(Ctx.Request["okPress"]); 

Поправьте меня, если я ошибаюсь здесь, но не это бросить FormatException, если строка не «true/True» или " false/False "? Есть ли способ обработать преобразование в одной строке, не беспокоясь об исключениях? Или мне нужно использовать Boolean.TryParse?

+1

Вы ответили на свой вопрос: использовать 'Boolean.TryParse' :-) – dtb

+0

@dtb Хорошо, но тогда я не могу использовать«встроенное решение»выше, верно? – Johan

+0

'Boolean.TryParse' возвращает' true', 'false' или' can a parse'. Таким образом, вам нужна одна строка для вызова, но более одной строки для надлежащего управления каждым случаем. – dtb

ответ

5

Вы можете использовать Boolean.TryParse:

bool okPress; 
bool success = Boolean.TryParse(Ctx.Request["okPress"]), out okPress); 

Для чего это стоит, здесь «один вкладыш», создайте следующий расширение, которое могло бы быть полезным, особенно в запросах LINQ:

public static bool TryGetBool(this string item) 
{ 
    bool b; 
    Boolean.TryParse(item, out b); 
    return b; 
} 

и писать :

bool okPress = Ctx.Request["okPress"].TryGetBool(); 
+2

Любая причина объявить bool b как false изначально? Он всегда будет установлен TryParse, не так ли, поэтому его не нужно инициализировать вообще, прежде чем передавать его в ... – Chris

+0

@ Крис: Это больно? Я инициализировал его с помощью 'false', чтобы показать значение по умолчанию' TryGetBool'. –

+1

Он делает немного ... Для меня это означает, что он что-то делает. например, что он устанавливает значение по умолчанию, поэтому, если вы должны изменить его на true, это будет новый параметр по умолчанию. Это было сказано, что вы ответили на мой вопрос: зачем это делать. Я могу не согласиться с тобой, но я думаю, что это, вероятно, только личное предпочтение кодирования. :) – Chris

2

ЕСЛИ вы не хотели использовать TryParse Вы могли бы сделать что-нибудь г как

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) && 
(Ctx.Request["okPress"].ToLower()=="true"); 

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

Это, конечно, предполагает, что вы довольны тем, что значение «рыба» считается ложным, а не как исключение.

Лучше хотя бы просто не делать это как одна строка. Обычно у вас нет максимального количества строк кода, поэтому две или три простые строки кода часто лучше одной сложной строки кода ...

+0

Downvote без комментариев? – Chris

1

Почему вы не сравниваете строку с true?

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) && 
    String.Compare(Ctx.Request["okPress"], "true", StringComparison.OrdinalIgnoreCase) == 0 
+0

Он основан на javascript 'confirm()', который вернет либо «true», либо «false». – Johan

1

Вы можете использовать метод TryParse из Boolean класса, как вы сказали.

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

bool result = Boolean.TryParse(Ctx.Request["okPress"]), out okPress); 

возвращает true, если значение было преобразовано успешно; в противном случае, false.

0

Ваше преобразование inline.

public static bool TryParseAsBoolean(this string expression) 
    { 
     bool booleanValue; 

     bool.TryParse(expression, out booleanValue); 

     return booleanValue; 
    } 

    bool okPress = Ctx.Request["okPress"].TryParseAsBoolean(); 
+0

Вся цель 'TryParse' заключается в том, чтобы избежать возможного исключения. Поэтому ваш код не имеет большого смысла. Вы никогда не войдете в блок 'Catch'. –

+0

Вы правы, это то, что происходит, когда вы делаете путь ко многим вещам одновременно. Спасибо, что указали на это, хотя :) – Marco

+1

Так как я использую его в строке, разве это не '' эта строка'? – Johan

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