使用try catch进行C#条件检查

时间:2017-09-08 06:24:31

标签: c# exception try-catch

我有一个文件名数组。如果数组中没有文件我需要抛出异常。我可以使用try catch。任何人都知道请帮助。谢谢。提前感谢。

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

2 个答案:

答案 0 :(得分:4)

  

我需要抛出异常。我可以使用try catch

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

我可以通过ex 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);
    }
}

答案 1 :(得分:0)

只是一个例子:

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

你必须决定抛出什么样的异常。如果fileEntries是您的方法的参数,那么ArgumentException就可以了......

但是:我想建议不要这样做。例如,您可以返回指示成功/失败的bool或错误代码。检查比客户端上的try / catch更便宜。并且通常不赞成使用控制流的异常。

有关详情,请参阅https://softwareengineering.stackexchange.com/a/189225