Mon application lit un fichier Excel à l'aide de VSTO et ajoute les données lues à un fichier de données. StringDictionary
. Il ajoute uniquement les données qui sont des nombres à quelques chiffres (1000 1000,2 1000,34 - la virgule est un délimiteur dans les normes russes).
Quel est le meilleur moyen de vérifier si la chaîne actuelle 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
}
o
double d;
string str = data.ToString();
if (Double.TryParse(str, out d)) // if done, then is a number
{
dic.Add(key, str);
}
Je dois utiliser StringDictionary
au lieu de Dictionary<string, double>
en raison des problèmes suivants liés à l'algorithme d'analyse syntaxique.
Mes questions : Quel est le chemin le plus rapide ? Lequel est le plus sûr ?
Et est-il préférable d'appeler Convert.ToDouble(object)
o Convert.ToDouble(string)
?
0 votes
Pour info, double.TryParse est la même chose que try { result = double.Parse(s) ; return true ; } catch { return false ; }. Convert est essentiellement une enveloppe pour les deux avec un tas de surcharges. La façon dont vous le faites ne fait aucune différence. Mais comme Jon l'a souligné, pensez à la manière de gérer les entrées erronées.
12 votes
Double.TryParse n'est pas la même chose que double.Parse 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 de caractères est un nombre en utilisant une fonction interne Number.TryStringToNumber, alors que Parse suppose qu'il s'agit déjà d'un nombre/double.