Double.TryParse ou Convertir.ToDouble - ce qui est plus rapide et plus sûr?

Mon application lit un fichier Excel à l'aide de VSTO et ajoute la lecture des données à un StringDictionary. Il ajoute que les données sont des nombres avec quelques chiffres (1000 1000,2 1000,34 - virgule est un séparateur dans les normes russes).

Ce qui est le mieux pour vérifier si la chaîne est un nombre approprié?

object data, string key; //data had read

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

ou

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

- Je utiliser StringDictionary au lieu de Dictionary<string, double> à cause de la suite de l'analyse de l'algorithme de questions.

Mes questions: Qui est le plus rapide? Ce qui est plus sûr?

Et est-il mieux d'appeler Convert.ToDouble(object) ou Convert.ToDouble(string) ?

  • Pour info, double.TryParse est la même chose que try { résultat = double.Parse(s); return true; } catch { return false; }. Convertir est essentiellement un wrapper pour les deux avec un tas de surcharges. Il ne fait aucune différence comment vous le faites. Mais comme Jon l'a fait observer, réfléchir à la façon de gérer la mauvaise entrée.
  • Double.TryParse n'est pas le même que le double.Analyser enveloppé dans un try..catch. La sémantique est la même, mais le chemin de code est différent. TryParse vérifie d'abord que la chaîne est un nombre à l'aide d'un Numéro interne.TryStringToNumber, tandis que d'Analyser suppose que c'est déjà un numéro/double.
InformationsquelleAutor abatishchev | 2009-02-25