繁体   English   中英

如何检查函数是否在C#中引发异常?

[英]How to check if a function throws an exception in c#?

如何检查函数是否在C#中引发异常?

public List<string> GetFileNames()
{
    try
    {
        // do something
        // return something
    }
    catch(Exception ex)
    {
        // do something
        // log something
    }
}

然后我将在代码中的某处调用GetFileNames() ,但我想检查它是否引发异常,例如,

var list = GetFileNames(); // can be 0 count

if(GetFileNames() throws an error)
{
    DoThisMethod()
}
else
{
    DoThisOtherMethod();
}

您在这里有很多选择:

  • 通常使用Try...模式(如TryParse完成此操作。

     bool TryGetFileNames(out List<string> fileNames) 
  • 您还可以返回null

我认为您可以使其更简单:

public void ICallGetFileNames() 
{
    var list = new List<YourObject>(); 
    try 
    {
        list = GetFileNames();
        DoThisOtherMethod();
    }
    catch (Exception ex) 
    {
        DoThisMethod();
    }        
}

这样,如果您的GetFileNames方法引发了异常,则不会调用DoThisOtherMethod(),因为您的代码将直接进入Exception块。 否则,如果未引发任何异常,则您的代码将在GetFileNames方法之后调用DoThisOtherMethod。

根本的问题是,您无法处理异常时就尝试这样做。

如果GetFilenames无法从异常中恢复,则它本身应引发异常。 这可能是通过完全省略try / catch,或通过捕获,包装和重新抛出来实现的。

public List<string> GetFilenames() {
    try {
        ...
    } catch (Exception e) {
        throw new FileLoadException("Failed to get filenames", e);
        // Or if you don't want to create custom exceptions, perhaps use an InvalidOperationException
    }
}

失败的话,如果您实际上不需要抽象功能,则根本不要在GetFilenames中捕获异常,然后按以下方式调用它:

try {
    var list = GetFilenames()
    DoSomething();
} catch (Exception e) {
    DoSomethingElse();
}

您无法在C#中执行此操作。

与您所描述的最接近的是用Java实现的“检查的异常”。 在这种情况下,该函数将声明它抛出一些异常,如下所示:

public void foo() throws IOException {
  // your code
}

编译时,您可能需要将其封装在TryCatch块中,或者以相同的方式在函数中传播它,以解决此问题。

在c#中,将函数封装在TryCatch块中,并在出现故障的情况下使用其他函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM