Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА:

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Если у вас есть строка, и вы ожидаете, что она всегда будет целым числом (скажем, если какой-либо веб-сервис передает вам целое число в строковом формате), вы должны использовать Int32.Parse().

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

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

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

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

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

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

Последнее редактирование: от Олег Коровяков.

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Посмотрите в рефлекторе:

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);
}

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

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

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Никакой разницы как таковой.

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

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

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

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

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
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 имеет какое-либо реальное влияние на производительность.

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

Последнее редактирование: от Олег Коровяков.

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

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
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

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

Последнее редактирование: от Олег Коровяков.
  • Страница:
  • 1
Модераторы: Дмитрий

О сайте

Строительство индивидуальных домов из лёгкого самана - опыт, советы, методика строительства и подробные инструкции. А также возможность применения альтернативных источников энергии.


Контакты

08340. ул.Салютная 17. с.Гнедын.
Киевская обл. Украина.

+38 067 492 4124.
+38 095 065 8860.

info@okwood.com.ua
www.okwood.com.ua

Местоположения


8PM2+7R Гнедин, Kyiv Oblast