2017-09-08 3 views
-5

J'ai un tableau de fichiers names.If aucun fichier est dans le tableau que je dois jeter un exception.Can j'utilise essayer attraper .Tout sait help.Thanks vous plaît à l'avance.C# chèque de condition à l'aide des captures d'essayer

string[] fileEntries = Directory.GetFiles(filepath, "*.csv");. 
// throw an exception if no files 
    if (fileEntries.Length == 0){} 
+4

Attraper une exception est le contraire de la lancer. Vous trouverez également de nombreux exemples si vous recherchez simplement 'C# throw an exception'. – Rob

+0

Voir aussi: [exceptions et gestion des exceptions] (https://docs.microsoft.com/dotnet/csharp/programming-guide/exceptions/) – Corak

Répondre

4

i besoin de jeter un exception.Can j'utilise attraper try

Le bloc try/catch est pour attraper une exception et faire quelque chose avec cette information. Si vous avez besoin de lancer une exception, il suffit de jeter

if (fileEntries.Length == 0) 
{ 
    throw new Exception("No *.csv files available"); 
} 

cette exception sera maintenant jeté vers le haut pour la méthode qui a appelé une méthode où ce morceau de code est situé. En utilisant un bloc try/catch, vous pouvez maintenant décider à quel niveau vous voulez attraper cette exception et utiliser l'information.

Exemple

void method1(){ method2(); } 

void method2(){ method3(); } 

void method3() 
{ 
    string[] fileEntries = Directory.GetFiles(filepath, "*.csv");. 

    if (fileEntries.Length == 0) 
    { 
     throw new Exception("No *.csv files available"); 
    } 
} 

sinon pris cette exception se rendra vers le haut pour method1 et arrêter votre programme d'exécution/avorter de manière drastique. Vous pouvez l'attraper à ce niveau et (si par exemple vous avez une application console) présente les informations à l'utilisateur:

void method1() 
{ 
    try 
    { 
     method2(); 
    } 
    catch(Exception ex) 
    { 
      Console.WriteLine(ex.Message); 
    } 
} 

puis-je passer un ex obj à l'exception d'ajouter une donnée pour plus de vérifier

Jetez un oeil au constructeur de la Exception de base, il vous permettra de passer un string comme source d'information, ou un additional exception comme exception interne.

EDIT:

Si vous créez votre propre custom exception comme suggéré par Corak. Vous pouvez définir votre propre constructeur et passer par exemple un enum pour le code d'erreur:

public enum ErrorCodes 
{ 
    E1, 
    E2, 
    S4, 
    P5 
} 
public class MyObjectTransferException : Exception 
{ 
    public object ErrorCode { get; set; } 

    public MyObjectTransferException(string message, ErrorCodes code) : base(message) 
    { 
     this.ErrorCode = code; 
    } 
} 

Maintenant en method3 vous jetterait exactement ce type d'exception:

void method3() 
{ 
    string[] fileEntries = Directory.GetFiles(filepath, "*.csv");. 

    if (fileEntries.Length == 0) 
    { 
     throw new MyObjectTransferException("No *.csv files available", ErrorCodes.E1); 
    } 
} 

et method1 vous devez attraper exactement ce type d'exception:

void method1() 
{ 
    try 
    { 
     method2(); 
    } 
    catch(MyObjectTransferException ex) 
    { 
      Console.WriteLine(ex.Message); 
      Console.WriteLine(ex.ErrorCode); 
    } 
} 
+0

Bonjour. Merci pour la réponse. Je peux passer un obj ex avec exception à ajouter une donnée pour un contrôle supplémentaire? –

+0

@John_Snow Pouvez-vous élaborer un peu? On ne sait pas ce que vous avez l'intention de faire. – Fildor

+0

je voudrais ajouter un code d'erreur à chaque type exceptions.So si le serveur de messagerie wouild aiment passer la valeur avec l'objet ex à l'aide ex.data.add (« Error », E1) –

0

un exemple:

if (fileEntries.Length == 0) 
{ 
    throw new ArgumentException("FileNames array must not be empty!"); 
} 

Vous devez décider quel type d'exception à jeter. ArgumentException serait ok si fileEntries était un paramètre à votre méthode ...

Mais: Je voudrais recommandons de ne pas le faire de cette façon. Vous pouvez renvoyer un bool indiquant un succès/échec par exemple ou un code d'erreur. Vérifier que c'est moins cher que d'essayer/attraper du côté du client. Et l'utilisation d'exceptions pour le contrôle du flux est généralement désapprouvée.

Voir https://softwareengineering.stackexchange.com/a/189225 pour plus d'informations à ce sujet.