Сведения о вопросе

SOON

18:43, 29th August, 2020

Теги

.net   parsing    

.Чистая разбора против преобразования

Просмотров: 477   Ответов: 5

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

Я не знаком с основами parse versus convert, поэтому всегда теряюсь, когда меня спрашивают, какой из них подходит better/faster/more.

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



  Сведения об ответе

$DOLLAR

00:44, 9th August, 2020

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


  Сведения об ответе

dumai

05:33, 11th August, 2020

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

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

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


  Сведения об ответе

ITSME

00:58, 4th August, 2020

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

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

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


  Сведения об ответе

fo_I_K

20:50, 3rd August, 2020

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


  Сведения об ответе

JUST___

13:09, 1st August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться