.Net Parse против Convert - PullRequest
       38

.Net Parse против Convert

13 голосов
/ 20 августа 2008

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

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

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

Ответы [ 5 ]

15 голосов
/ 20 августа 2008

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

5 голосов
/ 20 августа 2008

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

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

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

3 голосов
/ 20 августа 2008

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

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

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

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

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

1 голос
/ 20 августа 2008

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

...