от
У меня есть значения, которые хранятся в виде строк в
DataTable
, где каждое значение может действительно представляют собой
int
,
double
, или
string
(все они были преобразованы в строки во время процесса импорта из внешнего источника данных). Мне нужно, чтобы проверить и увидеть, какой тип каждого значения на самом деле. Что эффективнее для применения (или нет разницы)? Попробуйте преобразовать в
int
(а затем
double
). Если преобразование, возвращение
true
. Если исключение выдается, вернуть
false
. Регулярные выражения предназначены, чтобы соответствовать образцу из
int
или
double
Какой-либо другой метод?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

6 Ответы

0 голосов
от
У меня есть значения, которые хранятся в виде строк в
DataTable
, где каждое значение может действительно представляют собой
int
,
double
, или
string
(все они были преобразованы в строки во время процесса импорта из внешнего источника данных). Мне нужно, чтобы проверить и увидеть, какой тип каждого значения на самом деле. Что эффективнее для применения (или нет разницы)? Попробуйте преобразовать в
int
(а затем
double
). Если преобразование, возвращение
true
. Если исключение выдается, вернуть
false
. Регулярные выражения предназначены, чтобы соответствовать образцу из
int
или
double
Какой-либо другой метод?
0 голосов
от
Использовал бы двойной.Метод tryparse, он имеет преимущества в производительности.
0 голосов
от
Я бы сказал, Не волнуйтесь так много о таких микро-исполнении. Это гораздо лучше, чтобы просто получить что-то на работу, а потом сделать его ясным и кратким и легким для чтения, как это возможно. Худшее, что вы можете сделать, это пожертвовать читабельностью за незначительную сумму исполнения. В конце концов, лучший способ борьбы с Проблемы с производительностью, чтобы спасти их, когда у вас есть данные, что указывает на фактическое выполнение задачи... в противном случае вы будете тратить много времени на микро-оптимизации, и на самом деле приводят к увеличению расходов на техническое обслуживание в дальнейшем. Если вы нашли этот разбор ситуации-это действительно узкое место в вашем приложении, то самое время попробовать и выяснить, что самый быстрый способ решить проблему. Я думаю, что Джефф (и многие другие) писал о такого рода вещи много.
0 голосов
от
Вы получите разные результаты для различных методов в зависимости от компиляции с оптимизаций на. Вы в принципе есть несколько вариантов:
object o;

//checking with is
o is int

//check type
o.GetType() != typeof( int )

//cast and catch exception
try{ int j = (int) o; } 
catch {}

//use the tryparse
int.TryParse( Convert.ToString( o ), out j )
Вы можете легко создать консольное приложение, которое пытается каждый из этих 10 000 раз и продолжительности индивидуально для каждого (тест для вывода int и когда это что-то другое). Метод
try является самым быстрым, если объект имеет тип int, и однозначно самый медленный, если это не так (даже медленнее, чем GetType
).
int.TryParse
довольно быстро, если у вас есть строка, но если у вас есть неизвестный объект, это медленнее. Интересно, что с .Net 3.5 и оптимизаций включил проверить
o is int
занимает столько же времени, как
try, когда на самом деле является int. o is int
лишь немного медленнее, если на самом деле это нечто другое. Раздражающе FxCop будет бросить предупреждения, если вы делаете что-то вроде:
if( o is int )
    int j = (int) o;
Но я думаю, что это ошибка в FxCop - он не знает, что int является типом значения и рекомендует использовать
o as int
вместо. Если ваш вклад всегда является строкой
int.TryParse
лучше, в противном случае оператор
is
быстрее. Как вы строку, я хотел бы посмотреть на того, нужно ли вам знать, что это интервал, а не двойной. Если
int.TryParse
проходит то так и будешь
double.TryParse
, чтобы вы могли наполовину количество чеков возврата двуспальная или строку и пол в парном разряде, когда вы ожидаете инт.
0 голосов
от
Беда у вас в том, что там может быть ситуации, когда ответ может быть всех трех типов. 3 может быть int, Double или строку! Это зависит от того, что вы пытаетесь сделать, и как важно, что они представляют собой особый тип. Это может быть лучше просто оставить их в первоначальном виде как можно дольше или, альтернативно, некоторые с способ, чтобы отметить каждый (если у вас есть контроль над источником исходной строки).
0 голосов
от
Я лично пользуюсь инт.метод tryparse, затем дважды.метод tryparse. Производительность этих методов вполне быстро. Обе они возвращают логическое значение. Если оба терпят неудачу, то у вас есть строки, в том, как вы определили ваши данные.
...