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

时间:2017-06-15 00:43:31

标签: 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();
}

4 个答案:

答案 0 :(得分:2)

你有很多选择:

  • 这通常使用Try...模式,例如TryParse

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

答案 1 :(得分:0)

我认为你可以更简单:

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

这样,如果GetFileNames方法抛出异常,则不会调用DoThisOtherMethod(),因为您的代码将直接进入Exception块。否则,如果没有抛出异常,您的代码将在GetFileNames方法之后调用DoThisOtherMethod。

答案 2 :(得分:0)

根本问题在于,当您无法执行此操作时,您会尝试处理异常。

如果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();
}

答案 3 :(得分:0)

你不能在c#中这样做。

与您所描述的最接近的是&#34;已检查的异常&#34;这是在java中实现的。在这种情况下,函数将声明它抛出一些异常,如下所示:

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

编译 时,您可以通过将其封装在TryCatch块中或在您的函数中以相同的方式传播来解决此问题。

在c#中包含TryCatch块中的函数并在faliure中使用不同的函数。