2017-09-08 31 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