.Net Parse and Convert
В .Net вы можете прочитать строковое значение в другом типе данных, используя либо <datatype>.parse
, либо Convert.To<DataType>
.
Я не знаком с основами parse versus convert, поэтому я всегда в недоумении, когда его спрашивают, какой из них лучше/быстрее/более уместно.
Итак - какой способ лучше всего в каких обстоятельствах?
Ответы
Ответ 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 под капот. Так что в этом есть небольшая разница, и на самом деле это просто вопрос личного вкуса.