C# 如何管理异常

C# 如何管理异常,c#,exception-handling,C#,Exception Handling,我需要从外部数据库中提取一些数据。 我不能访问所有数据,这就是为什么我需要处理访问异常以不阻止应用程序的执行。 这是提取文档的功能,例如: public IDocumentListCollection getDocumentCollection(string ProjectID, SearchQuery query) { try { return DocumentService().FindDocum

我需要从外部数据库中提取一些数据。 我不能访问所有数据,这就是为什么我需要处理访问异常以不阻止应用程序的执行。 这是提取文档的功能,例如:

public IDocumentListCollection getDocumentCollection(string ProjectID, SearchQuery query)
        {
            try
            {
                return DocumentService().FindDocuments("", ProjectID, true, true);
            }
            catch(Exception e)
            {
                ...
            }
    }
我需要在catch bloc中写些什么来满足我的目的?

您需要在
FindDocuments
中“处理”1它

对于当前的<代码>尝试…捕获<代码>-阻止您所能做的就是:

  • 记录异常
  • 隐藏异常(不调用
    throw;
  • 您无法在
    FindDocuments
    关闭的位置重新启动或拾取文件

    [我需要在
    catch
    -块中写入什么内容才能满足我的目的

    FindDocuments
    中,任何内容都不能满足“忽略”或“跳过”权限异常的目的。您将需要编辑该方法


    一,。默认情况下,您根本不应该处理异常。

    您有两个好选项和一个坏选项

    在catch块中返回标准IDocumentListCollection,或者删除“try{}catch{}”,让函数抛出异常(并在更高级别上处理)

    第三个选项是returnnull(如果适用),但会使整个异常处理无效

    public IDocumentListCollection getDocumentCollection(string ProjectID, SearchQuery query)
    {
         IDocumentListCollection rtnVal;
         try
         {
            rtnVal = DocumentService().FindDocuments("", ProjectID, true, true);
         }
         catch(Exception e)
         {
             rtnVal = new DocumentListCollection(); //Or any other stubbed version.
         }
    
         return rtnVal;
    }
    

    首先,在VisualStudio中单击“调试”菜单,然后选择“异常”并关闭所有通知(“抛出”列)。现在,您的应用程序执行不会在调试时终止(当然,如果您的异常已被处理)

    当您访问不允许连接的数据时会引发什么异常?PermissionDeniedException然后您应该捕获PermissionDeniedException而不是exception。这样,如果抛出了PermissionDeniedException之外的内容,您将发现它。如果没有更具体的信息,就无法回答数据是如何组织的以及您是如何查询的。如果您的方法无法访问所需的外部数据,您希望您的方法做什么?返回空集合?抛出另一个异常?这真的取决于你想要什么。我不能,FindDocuments是一个已经在dll中准备好的函数,我在代码中导入它。我只是用它来提取我需要的数据。不幸的是,你已经回答了你自己的问题。所以我不能忽略该异常并继续提取我有权访问的数据?不是外部的。在你发现异常时,
    FindDocuments
    已经“消失”/“退出”(可以这么说).那你有什么建议?我怎么办?我感谢你的帮助:)