C# 调用方方法如何知道被调用方方法引发了哪些异常?

C# 调用方方法如何知道被调用方方法引发了哪些异常?,c#,.net,exception,C#,.net,Exception,我知道在C#中,我们不需要方法在方法签名中显式定义它可能抛出的异常。但是,我想知道我们如何处理调用方方法希望处理被调用方方法抛出的可能异常的场景 让我澄清我的问题 假设在DLL文件中有一个方法定义为 public string DoSomething() { // This method do something and returns a string } 现在作为一个调用者,我知道方法期望什么以及它返回什么结果。但是我如何知道这个方法可能引发什么异常呢 在jave中,我们有抛出关键字

我知道在C#中,我们不需要方法在方法签名中显式定义它可能抛出的异常。但是,我想知道我们如何处理调用方方法希望处理被调用方方法抛出的可能异常的场景

让我澄清我的问题

假设在DLL文件中有一个方法定义为

public string DoSomething() 
{
  // This method do something and returns a string
}
现在作为一个调用者,我知道方法期望什么以及它返回什么结果。但是我如何知道这个方法可能引发什么异常呢

在jave中,我们有抛出关键字。所以,如果我在java中定义相同的方法,那么我可以做如下的事情

public String doSomething() throws SomeException {
    // do something
    throw new SomeException();
}
通过这种方式,此方法的调用方知道需要处理哪些异常

既然C#在方法签名中没有throws关键字,我们如何在C#中实现这一点


一种可能的方法是捕获一个通用的异常对象。但同样,捕获一般异常是处理异常的可怕方式。

XML文档中有一节专门用于此目的:

/// <summary>
/// Does something
/// </summary>
/// <exception cref="System.OutOfMemoryException"></exception>
/// <returns></returns>
public string DoSomething()
{
    // This method do something and returns a string
}
//
///做点什么
/// 
/// 
/// 
公共字符串DoSomething()
{
//此方法执行某些操作并返回字符串
}
这允许API的设计者向客户机提供有关此方法调用所预期的异常的信息。像这样:


当光标位于方法上方时,您可以通过在上方点击三次
/
来生成这些XML行。

您可以始终使用XML注释,并在其中列出此方法引发的所有异常。通过这种方式,您将能够看到,由于IntelliSenseEvent与Java的结合,在键入时,您不只是使用Pokemon异常处理,就到此为止。无论哪种方式,您都需要了解调用方可以合理地处理方法抛出的异常,这总是需要人工解释。@Damien_the_unsiver是的,但在java中,如果被调用方方法重新抛出统一或自定义异常(对于此方法正在处理的所有异常),调用方必须只关心该异常。但在C#中,由于方法签名不提供任何信息,所以即使调用方也如何知道要处理什么。除了m.rogalski和user3185569提供的答案外,还有其他方法可以实现这一点吗?恕我直言,但作为一名Java开发人员,这并不能说服我在某个XML文件中定义我的方法引发的所有异常。不管喜欢与否,我相信C#设计人员考虑并拒绝了检查异常的想法——我相信即使在Java社区中,它们也不是没有争议的。在C#中,您可以查阅文档。没有编程机制。(当然,在这两种语言中都有一些例外或运行时错误,我们不会提及。我相信在Java中,这些都是错误)