Double.TryParse или Convert.ToDouble - что быстрее и безопаснее? - PullRequest
78 голосов
/ 25 февраля 2009

Мое приложение читает файл Excel с помощью VSTO и добавляет прочитанные данные в StringDictionary. Добавляются только данные, состоящие из нескольких цифр (1000 1000,2 1000,34 - запятая в российских стандартах - разделитель).

Что лучше проверить, соответствует ли текущая строка соответствующему числу?

object data, string key; // data had read

try
{
  Convert.ToDouble(regionData, CultureInfo.CurrentCulture);
  dic.Add(key, regionData.ToString());
}
catch (InvalidCastException)
{
  // is not a number
}

или

double d;
string str = data.ToString();
if (Double.TryParse(str, out d)) // if done, then is a number
{
  dic.Add(key, str);
}

Я должен использовать StringDictionary вместо Dictionary<string, double> из-за следующих проблем с алгоритмом синтаксического анализа.

Мои вопросы: какой путь быстрее? Что безопаснее?

А лучше позвонить Convert.ToDouble(object) или Convert.ToDouble(string)?

Ответы [ 11 ]

1 голос
/ 25 февраля 2009

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

Я бы ожидал, что TryParse тоже будет быстрее, поскольку он позволяет избежать накладных расходов на обработку исключений. Но используйте инструмент сравнения, такой как MiniBench Джона Скита , чтобы сравнить различные возможности.

...