Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
.Чистая разбора против преобразования
В .Net вы можете прочитать строковое значение в другой тип данных, используя либо <datatype>.parse , либо Convert.To<DataType> .
Я не знаком с основами parse versus convert, поэтому всегда теряюсь, когда меня спрашивают, какой из них подходит better/faster/more.
Итак - какой путь лучше всего выбрать в каких обстоятельствах?
Методы 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, так как это избавляет вас от большой головной боли от ловли ошибок, когда есть шанс, что значение, которое вы собираетесь разобрать, не имеет соответствующего типа.
Мой заказ обычно таков:
- Parse (если я могу быть уверен, что значение будет правильным типом, и я действительно стараюсь гарантировать это)
- TryParse (если я не могу быть уверен, что происходит всякий раз, когда задействован пользовательский ввод или ввод из системы, которую вы не можете контролировать)
- Convert (который, как мне кажется, я не использовал с тех пор, как начал использовать Parse и TryParse, но я могу ошибаться)
Существует также метод DirectCast, который вы должны использовать только в том случае, если вы уверены, какой тип объекта является. Это быстрее, но не делает никаких правильных проверок. Я использую DirectCast, когда извлекаю значения из слабо типизированного DataTable, когда я знаю тип для каждого столбца.
Если вам нужна скорость, я почти уверен, что прямой бросок-самый быстрый способ. Тем не менее, я обычно использую .Parse или .TryParse, потому что это, кажется, облегчает чтение и ведет себя более предсказуемым образом.
Конверт на самом деле называет Парс под капотом, я полагаю. Так что здесь нет никакой разницы, и это действительно просто кажется вопросом личного вкуса.