2014-12-01 1 views
-4

~ Предупреждение ~ Цель этого вопроса академическое и ответ должен использовать Int32.Parse()Как проверить ввод для Int32.Parse() (без исключений)

Привет

Я хочу знаете, есть ли способ «реализовать исключения», которые Int32.Parse() выбрасывает с использованием if() или что-то подобное (без использования исключений. AT ALL & в любой форме).

Заранее благодарен. Механика

~ EDIT1: Еще один способ выразить это: может ли быть способ обеспечения безопасного ввода для int32.Parse() без использования класса исключений?

~ EDIT2: Это не значит, что я не хочу, чтобы исключение было брошено вообще, как было указано в комментариях @PeterDuniho, я знаю о TryParse(). Я специально сказал, что хочу использовать Int32.Parse().

~ EDIT3: Еще лучший способ выразить мой вопрос: как я могу гарантировать, что строка, переданная как аргумент Int32.Parse(), не приведет к исключению?

~ EDIT4: Причина, по которой я не хочу использовать TryParse(), заключается в том, что если она не удалась, программа будет продолжена, а я хочу, чтобы она раздавилась, если вход (из Int32.Parse()) имеет неправильную форму.

+0

Что вы подразумеваете под «выполнением исключений ... без использования исключений»? Все исключения должны наследовать «Исключение», и в любом случае реализованное исключение является исключением. Итак, как вы могли без них? Вы просто ищете метод '' int.TryParse() ') (http://msdn.microsoft.com/en-us/library/System.Int32.TryParse (v = vs.110) .aspx)? –

+0

Это очень трудно объяснить, но я в основном имею в виду, что я хочу обрабатывать исключения, которые возникают из int32.parse(), не используя try & catch или принудительное исключение, или что-либо, что связано с исключениями. знаете, я просто хочу знать, можно ли это сделать. – Mechanic45

+0

Другой способ выразить это: есть ли способ обеспечить безопасный ввод для int32.Parse() без использования класса исключений? – Mechanic45

ответ

3
string stringValue = "123"; 
int intValue = 0; 

bool check = int.TryParse(stringValue, out intValue); 

Если проверка верна, синтаксический анализ выполняется правильно, если false, строка не может разобрать на int.

+2

О, ну ... Итак, в конце концов, что было сказано с первого комментария, был ответ? Я не знаю, почему мы так много говорили! – Andrew

+0

@Andrew В принципе, я отказался от попыток описать свою проблему и просто взял ответ с наибольшим количеством очков. – Mechanic45

+0

Вы выбрали ответ, который фактически решил вашу проблему? Разве это не было 'Regex', что вам нужно? – Andrew

2

Вы можете сделать это с регулярным выражением. Например:

string text = "-124"; 
int num; 
Regex intRegex = new Regex(@"^\s*(\+|-)?\d+\s*$"); 
if (intRegex.IsMatch(text)) 
    num = Int32.Parse(text); 
else 
    Console.WriteLine("Unfortunately, the program has crashed and burned."); 

В большом пакете данных я подготовил, это регулярное выражение имело те же результаты, как TryParse.

Если вы хотите получить более определенное регулярное выражение, вы можете найти другие варианты here.

+1

Собственно, это все еще не совсем правильно, потому что оно только подтверждает правильность типографики. Он не проверяет количество (которое может быть больше, чем 'int.MaxValue'). Тем не менее, плюс один из меня, просто для того, чтобы придерживаться явно ошибочного и невозможного вопроса. :) –

+0

Вы правы. Легкий способ, который приходит мне на ум, проверить это с помощью 'Int64.Parse', но это немного похоже на обман, а' Regex' тогда не имеет смысла. – Andrew

+0

Честно говоря, единственный способ удовлетворить требования OP - это идти вперед и попытаться разобрать текст. Весь вопрос был немного смехотворной стороной, и он перешел к невероятно смешной, когда ОП принял тот ответ, который был именно тем, что он сказал, что он не хочет делать. –

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