我有一個文件名的數組。如果沒有文件在數組中,我需要拋出一個異常。我可以使用try catch。任何人都知道請help.Thanks提前。使用try catch的C#條件檢查
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
// throw an exception if no files
if (fileEntries.Length == 0){}
我有一個文件名的數組。如果沒有文件在數組中,我需要拋出一個異常。我可以使用try catch。任何人都知道請help.Thanks提前。使用try catch的C#條件檢查
string[] fileEntries = Directory.GetFiles(filepath, "*.csv");.
// throw an exception if no files
if (fileEntries.Length == 0){}
我需要拋出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 exception由Corak建議。你可以定義自己的構造函數,並通過例如一個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);
}
}
Hi.Thanks for the .can我可以通過一個ex obj來添加異常來添加一個數據進一步檢查? –
@John_Snow你能詳細說一點嗎?目前還不清楚你打算做什麼。 – Fildor
我想爲每個類型的異常添加一個錯誤代碼。因此,如果郵件服務器wouild喜歡使用ex.data.add(「Error」,E1)傳遞ex對象的值 –
僅舉一例:
if (fileEntries.Length == 0)
{
throw new ArgumentException("FileNames array must not be empty!");
}
您必須決定拋出什麼樣的異常。 ArgumentException的將是確定的,如果fileEntries是一個參數,以你的方法...
但:我想建議不要做這種方式。例如,您可以返回一個指示成功/失敗的布爾或錯誤代碼。檢查它比客戶端上的try/catch更便宜。對控制流使用異常通常是不被接受的。
有關更多信息,請參閱https://softwareengineering.stackexchange.com/a/189225。
捕捉異常與拋出異常相反。如果您只是搜索'C#拋出異常',您還會發現很多示例。 – Rob
另請參見:[異常和異常處理](https://docs.microsoft.com/dotnet/csharp/programming-guide/exceptions/) – Corak