.Net Parse против Convert

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

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

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

5 ответов

Решение

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 быстрее.

Вот ответ для вас:

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

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

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

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

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

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

Конверт на самом деле называет Парс под капотом, я считаю. Так что здесь нет никакой разницы, и это действительно кажется вопросом личного вкуса.

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

Другие вопросы по тегам