2010-10-19 8 views
0

J'ai une classe qui consiste principalement à rassembler les entrées de chaîne, puis à sortir les données dans un certain format. Le résultat de la classe est fondamentalement un remplacement ToString().C# Gestion des exceptions

Avec ma classe, j'ai une méthode statique string Print(string path) qui lit les entrées d'un fichier plat. Il analyse ensuite ces entrées et génère une instance d'une classe pour chaque enregistrement du fichier plat. Ensuite, pour chaque instance de la classe, j'appelle la classe. ToString() et l'ajoute au stringbuilder qui sera finalement retourné dans Print().

Je m'assure que chaque enregistrement a les valeurs nécessaires et a une portée appropriée, si ce n'est pas le cas, j'ai besoin de lancer une exception. Je n'ai jamais fait de gestion des exceptions auparavant, donc je veux savoir si ce que je veux faire est encore possible. Quand un cas d'exception est levé, je veux prendre ce qui est dans le stringbuilder ajouter le nettoyage de balise de fermeture, puis ajouter le texte de l'exception au stringbuilder, puis retourner (Exception Error Text + stringbuilder.ToString() + FooterStuff).

Modifier le code:

Il ne pourrait pas vraiment être une bonne idée de lancer une exception, je pourrais juste besoin d'utiliser un try {} catch {} pour attraper une exception, puis ajoutez la Exception.Message à la début du stringbuilder. Je ne sais pas vraiment cependant, les exceptions sont assez nouvelles pour moi.

public class Record 
{ 
    public string Name; 
    public string Value; 
    ... 

    private Dictionary<string, LogFormat> = new LogFormat.Table(); 

    public static string Print() 
    { 
      Stringbuilder sb = new StringBuilder(); 
      var k = ReadLog(); 

      foreach (var x in k) 
      { 
       sb.Append(x.ToString()); 
      } 

      return sb.ToString(); 
    } 

    public override string ToString() 
    { 
     if (Table[Name].NeedsValue && (Value == String.Empty || Value == null)) 
     { 
      throw new Exception(); 
     } 

     return String.Format(Table[Name].Format, Attribute, Value); 
    } 
} 

public class LogFormat 
{ 
    public string Format; 
    public bool NeedsValue = false; 

    public Dictionary<string,LogFormat> Table() 
    { 
      Dictionary<string,LogFormat> dct = new Dictionary<string,LogFormat>(); 
      dct.Add("Address", new LogFormat(){Format = "Street:{0}\nCity:{1}"}); 
      ... 
      return dct; 
    } 
} 
+0

envoyer votre code ... –

+0

OK. Donne moi une minute. – Shawn

Répondre

0

Vous pouvez essayer quelque chose comme ça:

private string YourMethod() 
{ 
    var sb = new StringBuilder(); 

    try 
    { 
     // Do your stuff 
    } 
    catch (ASpecificException ex) 
    { 
     sb.Insert(0, ex.Message); 
    } 
    finally 
    { 
     sb.Append("YourFooter"); 
    } 

    return sb.ToString(); 
} 
2

Je ne suis pas tout à fait sûr de ce que vous voulez réaliser, mais il semble que vous voulez utiliser finally

http://msdn.microsoft.com/en-us/library/zwc8s4fz(VS.71).aspx

+1

me battre, vous pouvez gérer votre nettoyage avec un bloc finalement. Si vous allez lire des fichiers et que vous pouvez ainsi lire des fichiers qui restent ouverts, vous devriez également consulter l'instruction using. – pstrjds

0

Vous devez utiliser un bloc essayer attraper. Voir ceci reference.

Vous pouvez effectuer les tâches de nettoyage dont vous avez besoin dans les blocs catch et finally.

0

Dans votre classe, vous pouvez utiliser lancer l'instruction si quelque chose ne va pas dans votre classe. Et puis quand vous travailler avec vous classe vous devez utiliser try-catch-finally

+0

Dois-je écrire comme une exception personnalisée? – Shawn

+0

vous pourriez écrire votre propre exception personnalisée ce n'est pas très difficile, mais vous n'avez pas vraiment besoin. Il existe de nombreuses classes d'exceptions dans .Net qui couvriront la plupart des situations rencontrées. http://msdn.microsoft.com/en-us/library/ms229064.aspx – Kieran