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

C# 如何在c中检查函数是否引发异常?,c#,C#,如何在c中检查函数是否引发异常 public List<string> GetFileNames() { try { // do something // return something } catch(Exception ex) { // do something // log something } } 您在这里有很多选择: 这通常是通过尝试来完成的。。。像锥虫一样

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

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

您在这里有很多选择:

这通常是通过尝试来完成的。。。像锥虫一样的图案

也可以返回null


您在这里有很多选择:

这通常是通过尝试来完成的。。。像锥虫一样的图案

也可以返回null


我想你可以简化一下:

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

这样,如果异常是由GetFileNames方法引发的,则不会调用DoThisOtherMethod,因为代码将直接进入异常块。否则,如果没有引发异常,您的代码将在GetFileNames方法之后调用dothisother方法。

我认为您可以简化它:

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

这样,如果异常是由GetFileNames方法引发的,则不会调用DoThisOtherMethod,因为代码将直接进入异常块。否则,如果没有引发异常,代码将在GetFileNames方法之后调用DothisOther方法。

基本问题是,当您无法处理异常时,您正在尝试处理该异常

如果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/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
    }
}

你不能用c来做这件事

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

public void foo() throws IOException {
  // your code
}
在编译时,您可以通过将其封装在TryCatch块中或在函数中以相同的方式传播来处理此问题


在c中,将函数括在TryCatch块中,并在出现错误时使用不同的函数。

在c中不能这样做

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

public void foo() throws IOException {
  // your code
}
在编译时,您可以通过将其封装在TryCatch块中或在函数中以相同的方式传播来处理此问题


在c中,将函数括在TryCatch块中,并在出现错误时使用不同的函数。

选项1:不要捕获方法中的异常,让它冒泡出来,并在您真正想要做出决定的块中捕获它。选项2:让您的方法返回一个指示成功/失败的布尔值。如果需要返回值,请考虑参数。还有很多其他的方法,选项1:不要在方法中捕捉异常,让它冒泡出来,并在您真正想要做出决定的块中捕捉它。选项2:让您的方法返回一个指示成功/失败的布尔值。如果需要返回值,请考虑参数。还有很多其他的方法,