Подтвердить что ты не робот

.Net Parse and Convert

В .Net вы можете прочитать строковое значение в другом типе данных, используя либо <datatype>.parse, либо Convert.To<DataType>.

Я не знаком с основами parse versus convert, поэтому я всегда в недоумении, когда его спрашивают, какой из них лучше/быстрее/более уместно.

Итак - какой способ лучше всего в каких обстоятельствах?

4b9b3361

Ответ 1

Методы Convert.ToXXX() предназначены для объектов, которые могут иметь правильный или похожий тип, тогда как .Parse() и .TryParse() предназначены специально для строк:

//o is actually a boxed int
object o = 12345;

//unboxes it
int castVal = (int) 12345;

//o is a boxed enum
object o = MyEnum.ValueA;

//this will get the underlying int of ValueA
int convVal = Convert.ToInt32( o );

//now we have a string
string s = "12345";

//this will throw an exception if s can't be parsed
int parseVal = int.Parse( s );

//alternatively:
int tryVal;
if( int.TryParse( s, out tryVal ) ) {
    //do something with tryVal 
}

Если вы скомпилируете флаги оптимизации, TryParse очень быстро - это лучший способ получить число из строки. Однако, если у вас есть объект, который может быть int или может быть строкой Convert.ToInt32 быстрее.

Ответ 2

Вот вам ответ:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

Хотя я думаю, что в современных версиях .NET лучше всего использовать TryParse в любом случае, если есть сомнения, что преобразование будет работать.

Ответ 3

Я большой поклонник TryParse, так как он сэкономит вам много головной боли при улавливании ошибок, когда есть шанс на то, что вы стоите "Анализ будет не соответствующего типа.

Мой заказ обычно:

  • Разбор (если я уверен, что значение будет правильным типом, и я стараюсь это сделать)
  • TryParse (если я не могу быть уверен, что происходит при каждом вводе пользователя или вводе из системы, которую вы не можете контролировать)
  • Convert (который, я думаю, я не использовал с тех пор, как начал использовать Parse и TryParse, но мог ошибаться)

Ответ 4

Существует также метод DirectCast, который следует использовать, только если вы уверены, что такое тип объекта. Это быстрее, но не выполняет никаких проверок. Я использую DirectCast, когда я извлекаю значения из слабо типизированного DataTable, когда я знаю тип для каждого столбца.

Ответ 5

Если вам нужна скорость, я уверен, что прямой актер - самый быстрый способ. Это, как говорится, я обычно использую .Parse или .TryParse, потому что, похоже, упрощает чтение и ведет себя более предсказуемым образом.

Я считаю, что конвертировать на самом деле вызовы Parse под капот. Так что в этом есть небольшая разница, и на самом деле это просто вопрос личного вкуса.