.Net Parse versus Convert


13

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

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

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

15

В 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

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

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

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


1

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


1

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

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


3

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

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

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