2017-09-08 3 views
-5

Ich habe eine Reihe von Dateinamen. Wenn keine Datei im Array ist, muss ich eine Ausnahme zu werfen.Kann ich versuchen versuchen fangen. Jeder weiß, bitte helfen. Vielen Dank im Voraus.C# Zustand überprüfen mit Versuch fangen

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

Eine Ausnahme zu fangen ist das Gegenteil davon, sie zu werfen. Sie würden auch viele Beispiele finden, wenn Sie einfach nach 'C# werfen eine Ausnahme' suchen. – Rob

+0

Siehe auch: [Ausnahmen und Ausnahmenbehandlung] (https://docs.microsoft.com/dotnet/csharp/programming-guide/exceptions/) – Corak

Antwort

4

ich brauche eine exception.Can i Fang verwenden versuchen zu werfen

Der try/catch-Block für den Fang eine Ausnahme ist und mit dieser Information etwas tun. Wenn Sie eine Ausnahme werfen müssen, werfen sie einfach

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

diese Ausnahme nun geworfen werden, nach oben auf das Verfahren, das ein Verfahren, bei dem dieses Stück Code genannt befindet. Mit einem try/catch-Block können Sie nun entscheiden, auf welcher Ebene Sie diese Ausnahme abfangen möchten und die Informationen verwenden.

Beispiel

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"); 
    } 
} 

wenn diese Ausnahme nicht abgefangen wird nach oben method1 reisen und das Programm vor der Hinrichtung zu stoppen/abbrechen drastisch. Sie können es auf dieser Ebene fangen und (wenn Sie zum Beispiel eine Konsolenanwendung haben) präsentieren die Informationen für den Benutzer:

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

kann ich eine Ex-Pass obj mit Ausnahme einer Daten hinzufügen für weitere

überprüfen

Werfen Sie einen Blick auf den Konstruktor der Basis Exception es erlaubt Ihnen, eine string als Informationsquelle zu übergeben oder eine additional exception als innere Ausnahme.

EDIT:

Wenn Sie erstellen Sie Ihre eigenen custom exception wie Corak vorgeschlagen. Sie könnten Ihren eigenen Konstruktor und geben zum Beispiel ein enum für den Fehlercode definieren:

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; 
    } 
} 

Jetzt in method3 würden Sie werfen genau diese Art von Ausnahme:

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

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

und in method1 würden Sie brauchen, um fängt genau diese Art von Ausnahme:

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

Hi.Thanks für die Antwort .kann ich ein Ex-Obj mit Ausnahme hinzufügen Daten zur weiteren Überprüfung? –

+0

@John_Snow Können Sie ein wenig weiter ausführen? Es ist unklar, was Sie vorhaben. – Fildor

+0

Ich möchte einen Fehlercodes zu jedem Typ Ausnahmen hinzufügen. So, wenn Mail-Server möchte den Wert mit ex-Objekt übergeben mit ex.data.add ("Error", E1) –

0

Nur ein Beispiel:

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

Sie müssen entscheiden, welche Art von Ausnahme zu werfen. Argument wäre ok, wenn fileEntries ein Parameter auf Ihre Methode ...

war

Aber: Ich möchte empfehlen NICHT es auf diese Weise zu tun. Sie könnten zum Beispiel einen Booler mit Erfolg/Fehler oder einen Fehlercode zurückgeben. Dies zu überprüfen, ist weniger kostenaufwendig als try/catch auf der Client-Seite. Und die Verwendung von Ausnahmen für den Kontrollfluss ist im Allgemeinen verpönt.

Weitere Informationen dazu finden Sie unter https://softwareengineering.stackexchange.com/a/189225.

Verwandte Themen