Sélectionnez analysé int, si la chaîne a été parseable à int

J'ai donc une IEnumerable<string> qui peuvent contenir des valeurs qui peuvent être analysés comme int, ainsi que des valeurs qui ne peuvent pas être.

Comme vous le savez, Int32.Parse déclenche une exception si une chaîne ne peut pas être changé pour un int, alors que Int32.TryParse peut être utilisé pour vérifier et voir si la conversion est possible sans traiter l'exception.

Si je veux utiliser une requête LINQ pour one-liner analyser ces chaînes qui peut être analysé comme int, sans jeter une exception le long de la voie. J'ai une solution, mais voudrais l'avis de la communauté quant à savoir si c'est la meilleure approche.

Voici ce que j'ai:

int asInt = 0;
var ints = from str in strings
           where Int32.TryParse(str, out asInt)
           select Int32.Parse(str);

Donc, comme vous pouvez le voir, je suis en utilisant asInt comme un espace de travail pour l'appel à la TryParse, juste pour déterminer si TryParse serait de réussir (return bool). Puis, dans la projection, je suis tout à fait d'effectuer l'analyse. Qui se sent moche.

Est-ce la meilleure manière de filtrer le parseable valeurs dans une ligne à l'aide de LINQ?

  • Vous pouvez utiliser asInt directement en sélectionner une valeur.
  • Droit; ressemble à la réponse de Joe capture qui. J'ai effectivement changé à mes accepté de répondre parce que c'est plus concis que certains des autres.
InformationsquelleAutor Ben Lakey | 2011-02-10