Мое приложение считывает файл Excel с использованием VSTO и добавляет прочитанные данные в StringDictionary
. Он добавляет только данные, которые представляют собой цифры с несколькими цифрами (1000 1000,2 1000,34 - запятая - это разделитель в российских стандартах).Double.TryParse или Convert.ToDouble - что быстрее и безопаснее?
Что лучше проверить, соответствует ли текущая строка подходящему номеру?
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)
?
FYI, double.TryParse - это то же самое, что и try {result = double.Parse (s); return true; } catch {return false; }. Преобразование по существу является оберткой для обеих групп с перегрузкой. Неважно, как вы это делаете. Но, как указал Джон, подумайте о том, как обращаться с плохим вводом. –
Двухместный.TryParse - это не то же самое, что double.Parse, завернутый в try..catch. Семантика одна и та же, но путь кода отличается. TryParse сначала проверяет, что строка является числом, используя внутренний Number.TryStringToNumber, тогда как Parse предполагает, что это уже число/double. –