rusqhyazeubebgcahrcsdanlenetfifrglkadeelhuisgaitkkkylvltmknoplptrosrskslessvtrukuz

В чем основное различие между int.Parse () и Convert.ToInt32

Больше
6 мес. 1 нед. назад - 6 мес. 1 нед. назад #229 от О.Коровяков
Если у вас есть строка, и вы ожидаете, что она всегда будет целым числом (скажем, если какой-либо веб-сервис передает вам целое число в строковом формате), вы должны использовать Int32.Parse().

Если вы собираете данные от пользователя, вы обычно используете Int32.TryParse(), поскольку он позволяет вам более мелкомасштабный контроль над ситуацией, когда пользователь вводит неверный ввод.

Convert.ToInt32() принимает объект в качестве аргумента.

Convert.ToInt32() также не бросает ArgumentNullException, когда его аргумент равен нулю, как это делает Int32.Parse(). Это также означает, что Convert.ToInt32(), вероятно, является более медленным, чем Int32.Parse(), хотя на практике, если вы не выполняете очень много итераций в цикле, вы никогда его не заметите.

Как указывают другие, Convert.ToInt32 (s) не выдает исключение, когда s равно null, а Parse () делает. «Немного медленнее» совершенно не относится к делу, поскольку вы никогда не будете измерять разницу.

Я редактирую свой ответ для большей полноты. Но что касается производительности, я уверен, что разница в скорости будет заметна, если вы вызываете ее во вложенном цикле ...
Последнее редактирование: 6 мес. 1 нед. назад пользователем О.Коровяков.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 мес. 1 нед. назад #230 от О.Коровяков
Посмотрите в рефлекторе:

int.Parse( "32" ):
public static int Parse(string s)
{
    return System.Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo);
}

который является вызовом:
internal static unsafe int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
{
    byte* stackBuffer = stackalloc byte[1 * 0x72];
    NumberBuffer number = new NumberBuffer(stackBuffer);
    int num = 0;
    StringToNumber(s, style, ref number, info, false);
    if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
    {
        if (!HexNumberToInt32(ref number, ref num))
        {
            throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
        }
        return num;
    }
    if (!NumberToInt32(ref number, ref num))
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
    }
    return num;
}

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

Как говорится в первом комментарии

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 мес. 1 нед. назад #231 от О.Коровяков
Никакой разницы как таковой.

Convert.ToInt32() вызывает int.Parse() внутренне

За исключением одной вещи Convert.ToInt32() возвращает 0, когда аргумент null

В противном случае обе работают одинаково

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 мес. 1 нед. назад - 6 мес. 1 нед. назад #232 от О.Коровяков
TryParse быстрее...


Первая из этих функций, Parse, является той, которая должна быть знакома любой разработчик .Net. Эта функция примет строку и попытается извлечь из него целое число и затем вернуть целое число. Если он работает во что-то, что он не может проанализировать, тогда он выдает исключение FormatException или если число слишком велико, OverflowException. Кроме того, он может ArgumentException, если вы передадите ему нулевое значение.

TryParse - новое дополнение к новой инфраструктуре .Net 2.0, которая устраняет некоторые проблемы с оригинальной функцией Parse. Главный разница в том, что обработка исключений очень медленная, поэтому, если TryParse не удается разобрать строку, она не генерирует исключение, такое как Parse делает. Вместо этого он возвращает логическое значение, указывающее, удалось ли успешно проанализировать число. Итак, вы должны перейти в TryParse как строка, подлежащая анализу, и параметр Int32 out для заполнения. Мы будем используйте профилировщик для проверки разницы в скорости между TryParse и Разбор в обоих случаях, когда строка может быть правильно разобрана и в случаи, когда строка не может быть правильно разобрана.

Класс Convert содержит ряд функций для преобразования одного базового класса в другой. я полагаю, что Convert.ToInt32 (строка) просто проверяет пустую строку (если строка null возвращает нуль в отличие от Parse), а затем просто вызывает Int32.Parse(строка). Я использую профилировщик, чтобы подтвердить это и увидеть если использование Convert в отличие от Parse имеет какое-либо реальное влияние на производительность.

Последнее редактирование: 6 мес. 1 нед. назад пользователем О.Коровяков.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 мес. 1 нед. назад - 6 мес. 1 нед. назад #233 от О.Коровяков
Int32.parse(строка) --- >

Метод Int32.Parse(string s) преобразует строковое представление числа в его 32-разрядный эквивалент со знаком. Когда s - нулевая ссылка, он будет вызывать ArgumentNullException. Если s отличен от целочисленного значения, он будет вызывать FormatException. Когда s представляет число меньше MinValue или больше MaxValue, оно будет вызывать OverflowException. Например:
string s1 = "1234"; 
string s2 = "1234.65"; 
string s3 = null; 
string s4 = "123456789123456789123456789123456789123456789"; 
 
result = Int32.Parse(s1);    //1234
result = Int32.Parse(s2);    //FormatException
result = Int32.Parse(s3);    //ArgumentNullException 
result = Int32.Parse(s4);    //OverflowException

Convert.ToInt32 (строка) → Convert.ToInt32 (string s) преобразует указанное строковое представление 32-разрядного знакового целочисленного эквивалента. Это вызывает, в свою очередь, метод Int32.Parse(). Когда s - это нулевая ссылка, она возвращает 0 вместо того, чтобы бросать ArgumentNullException. Если s отличен от целочисленного значения, он будет вызывать FormatException. Когда s представляет число меньше MinValue или больше MaxValue, оно будет вызывать OverflowException.

Например:
result = Convert.ToInt32(s1);    // 1234 
 result = Convert.ToInt32(s2);    // FormatException
 result = Convert.ToInt32(s3);    // 0
 result = Convert.ToInt32(s4);    // OverflowException
Последнее редактирование: 6 мес. 1 нед. назад пользователем О.Коровяков.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подпишитесь на наши новости...

Если вам интересны материалы опубликованных на Нашем сайте, Вы можете подписаться на рассылку информационных бюллетеней о новых публикациях ... Просто введите адрес электронной почты на какую Вы хотите получать Новости и нажмите кнопку "Подписаться"

Контакт Инфо

Ok-Wood.
08304 ул.Салютная,c.Гнедын,
Киевская обл, Украина
  • Тел: +39 067 492 41 24
    Tel: +38 095 095 88 60
  • Email: info@ok-wood.com.ua
  • Web: ok-wood.com.ua

Весь процесс строительства описан на страницах сайта, но более подробно о технологии, методах строительства, и всех деталях - Вы можете узнать в книге.