.Net Parse против Convert

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

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

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

20.08.2008 18:06:12
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 быстрее.

15
20.08.2008 18:28:41

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

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

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

5
20.08.2008 18:11:09

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

1
20.08.2008 18:12:54

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

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

1
20.08.2008 18:12:58

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

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

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