2017-09-08 30 views
-5

我有一個文件名的數組。如果沒有文件在數組中,我需要拋出一個異常。我可以使用try catch。任何人都知道請help.Thanks提前。使用try catch的C#條件檢查

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

捕捉異常與拋出異常相反。如果您只是搜索'C#拋出異常',您還會發現很多示例。 – Rob

+0

另請參見:[異常和異常處理](https://docs.microsoft.com/dotnet/csharp/programming-guide/exceptions/) – Corak

回答

4

我需要拋出exception.Can我使用嘗試捕捉

的try/catch塊是捕獲異常並做處理這些信息的東西。如果您需要拋出一個異常,只是把它

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

這個例外現在將向上拋出,調用其中這段代碼位於方法的方法。使用try/catch塊,您現在可以決定在哪個級別捕獲此異常並使用該信息。

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

如果不是抓住了這個異常將向上前往method1和執行中斷程序/大幅度終止它。您可以在這個水平上趕上它,(例如,如果你有一個控制檯應用程序)提交的信息給用戶:

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

我可以通過一個前OBJ與異常的添加數據作進一步檢查

看看基本Exception的構造它可以讓你通過一個string作爲信息來源,或作爲additional exception內部異常。

編輯:

如果你創建自己的custom exceptionCorak建議。你可以定義自己的構造函數,並通過例如一個enum的錯誤代碼:

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

現在method3你會扔正是這種類型的異常:

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

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

method1你需要趕上正是這種類型的異常:

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

Hi.Thanks for the .can我可以通過一個ex obj來添加異常來添加一個數據進一步檢查? –

+0

@John_Snow你能詳細說一點嗎?目前還不清楚你打算做什麼。 – Fildor

+0

我想爲每個類型的異常添加一個錯誤代碼。因此,如果郵件服務器wouild喜歡使用ex.data.add(「Error」,E1)傳遞ex對象的值 –

0

僅舉一例:

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

您必須決定拋出什麼樣的異常。 ArgumentException的將是確定的,如果fileEntries是一個參數,以你的方法...

:我想建議不要做這種方式。例如,您可以返回一個指示成功/失敗的布爾或錯誤代碼。檢查它比客戶端上的try/catch更便宜。對控制流使用異常通常是不被接受的。

有關更多信息,請參閱https://softwareengineering.stackexchange.com/a/189225