2010-12-10 11 views
3

Si je (.NET/C#), par exemple, une variable de type long je peux le convertir en une chaîne formatée comme:Puis-je vérifier si un spécificateur de format est valide pour un type de données donné?

long value = 12345; 
string formattedValue = value.ToString("D10"); // returns "0000" 

Si je spécifie un format non valide pour ce type I obtenir une exception:

long value = 12345; 
string formattedValue = value.ToString("Q10"); // throws a System.FormatException 

question: y at-il un moyen de vérifier si un spécificateur de format est valide (à part essayer de mettre en forme et à attraper l'exception) avant de demander ce format, quelque chose comme long.IsFormatValid("Q10")?

Merci pour votre aide!

Répondre

2

Je n'ai pas essayé cela, mais je pense que vous pouvez créer une méthode d'extension tels que:

namespace ExtensionMethods 
{ 
    public static class MyExtensions 
    { 

     public static bool IsFormatValid<T>(this T target, string Format) 
      where T : IFormattable 
     { 
      try 
      { 
       target.ToString(Format, null); 
      } 
      catch 
      { 
       return false; 
      } 
      return true; 
     } 
    } 
} 

que vous pouvez ensuite appliquer ainsi:

long value = 12345; 
if (value.IsFormatValid("Q0")) 
{ 
    ... 
+0

Ouh, ça a l'air bien! (Bien qu'il vérifie toujours une exception, il est encapsulé à un seul point.) – Slauma

+0

Cela fonctionne pour moi (imprime Faux). –

+0

@Jon Skeet: D'accord ... je perds la tête. J'ai besoin de dormir ... merci d'avoir jeté un coup d'oeil. – Lazarus

2

Plutôt que de créer un chèque de que je suggère qu'il pourrait être mieux que les développeurs lit le documentation pour savoir ce qui est autorisé où.

Cependant, s'il y a un problème avec beaucoup de fautes de frappe, je suppose que vous pourriez écrire une table de consultation à partir des informations sur cette page. Bien que cela pourrait juste vous donner un faux sentiment de sécurité dans le sens où vous feriez des gens faire des erreurs entre les spécificateurs de format valide (écrire un f mais ils signifiaient e etc.).

Modifié pour supprimer un bit confus à propos de TryParse/Parse.

+1

Comme une idée folle, supposons que la chaîne de format est fournie par une entrée de l'utilisateur. En outre, je ne sais pas comment TryParse vs Parse est pertinent ici, c'est la valeur de chaîne pas de chaîne à la valeur. – Lazarus

+0

Je ne suis pas sûr comment 'Parse' ou' TryParse' pourrait aider ici. Je n'ai pas besoin de convertir un 'string' en un' long' (ou autre type) mais l'autre direction de 'long' (ou un autre type) à' string' avec un spécificateur de format donné. Le problème est que ce spécificateur de format est entré par les utilisateurs (qui sont probablement eux-mêmes des programmeurs) comme une simple chaîne dans certains fichiers texte (qui peuvent changer assez fréquemment) et j'ai souvent besoin de valider que ce format est valide. – Slauma

+0

@Lazarus: TryParse vs Parse était juste que je deviens confus, merci de le signaler. –

Questions connexes