Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > String в int


Автор: kurzon 3.11.2007, 01:24
Как переменую типа String конвертировать в тип int?

Автор: marcusmae 3.11.2007, 01:31
так

Код

string str = "1234";
int value = Convert.ToInt32(str);  //-- 1234


или так

Код

string str = "1234";
int value;
bool success = Int32.TryParse(str, out value);


Различие в том, что подопечные класса Convert возвращают результат и в случае ошибок вываливают исключение, а .TryParse-ы сообщают о степени успешности в логический результат и значение передают через аргумент на выход.

Автор: Xenon 3.11.2007, 02:21
marcusmae, а операции типа int.Parse(...) чем от этих двух отличаются?

Автор: marcusmae 3.11.2007, 12:52
Цитата(Xenon @  3.11.2007,  02:21 Найти цитируемый пост)
 а операции типа int.Parse(...) чем от этих двух отличаются?

Ага, забыл про неё.

Автор: Xenon 3.11.2007, 14:31
marcusmae, нет, я задал вопрос, а не решил подстебнуть. Мне интересно чем эта фигня - то от тех отличается или алгоритм один и тот же? smile

Автор: marcusmae 3.11.2007, 15:35
Ааа

Ну чем .Parse отличается от .TryParse - это как, допустим в System.Collections.Genetic.Dictionary<T>, есть индексер по ключам, возвращающий значения и есть .TryGetValue, возвращающий bool, а значение - через out-аргумент. Ээ, тут не вижу что объяснять, просто разные подходы.

А вот Convert.ToInt32 отличается от Int32.Parse тем, как обрабатывается null. Convert.ToInt32 возвращает ноль, а  Int32.Parse вывалит исключение. Вы правы, на это стоит обратить внимание. По этому поводу в http://blogs.msdn.com/ianhu/archive/2005/12/19/505702.aspx :

Цитата

I believe that Convert.ToInt32(string) just checks for a null string (if the string is null it returns zero unlike the Parse) then just calls Int32.Parse(string). 


и проводится некоторое сравнение.

Автор: tol05 3.11.2007, 16:24
Int32.Parse - если приведение строки к int невозможно - выбрасывается исключение. Опасно использовать без try-catch. 

Int32.TryParse  - если приведение строки к int невозможно - просто возвращает false, исключение не выбрасывается. Само название говорит этой функции "попробую привести, после выполнения скажу "да" или "нет"
smile

Convert.ToInt32 - тоже выбрасывает исключение при неудаче. 

Ну а зачем Convert.ToInt32, если есть Int32.Parse ? Да просто клас Convert разработан для любых приведений между базовыми типами .Net, не только string в int , но и "любой базовый тип в любой базовый тип". Посчитали - сколько возможно комбинаций преобразования среди базовых типов, да и написали все методы преобразования. А Convert - это враппер для всех этих методов.
Вот Convert.ToInt32 из рефлектора 
Код

public static int ToInt32(string value)
{
    if (value == null)
    {
        return 0;
    }
    return int.Parse(value, CultureInfo.CurrentCulture);
}

 


Автор: Xenon 3.11.2007, 16:40
Насчет исключений был в курсе, а того, что Convert, по сути, оболочка лишь - нет. Спасибо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)