.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, когда извлекаю значения из свободно типизированной таблицы данных, когда знаю тип для каждого столбца.