当我有System.Exception和MyNamespace.Exception时,为什么捕获"Exception"不明确?

Zad*_*ram 2 c#

在我的C#代码中,我可以访问a MyNamespace.Exception和a System.Exception.当我想要捕获其中一个例外时,理想情况下,我完全符合我想要捕获哪一个或使用别名来说清楚.但是,我担心只需输入就可以了catch(Exception).我假设编译器会将其标记为不明确的名称,但事实并非如此.它总是假设我想要一个MyNamespace.Exception明显留下漏洞的许多例外,如果我打算使用一个错过捕获System.Exception.这不仅仅是一个问题Exception,我也有例外MyNamespace.ArgumentException.

所以我的问题是为什么编译器不会抱怨模糊的异常类型?另外,你会如何防止这个问题?

Eri*_*ert 9

为什么编译器不会抱怨模糊的异常类型?

可能是因为你说的方式并不含糊.如果你说:

using MyNamespace;
using System;
class P 
{
    void M()
    {
        try { ... } catch(Exception) { ... }
Run Code Online (Sandbox Code Playgroud)

那么它是模棱两可的,因为不清楚哪个"使用"指令是相关指令; 两者都可以工作.

如果你说

using System;
namespace MyNamespace
{
  class P 
  {
    void M()
    {
      try { ... } catch(Exception) { ... }
Run Code Online (Sandbox Code Playgroud)

然后它不含糊; 当前命名空间中的内容优先于using指令导入的内容.

你会如何防止这个问题?

我不会首先考虑这种情况.将您的类型命名为与常见系统类型相同是令人困惑,危险并且违背良好的设计原则.