【问题标题】:System.Exception or just ExceptionSystem.Exception 或只是 Exception
【发布时间】:2011-07-28 06:38:04
【问题描述】:

我是编程的初学者,老实说,我所学到的一切都是为了确保我能正确地做到这一点。 我的问题是,在 MSDN 网站上,它说明了在处理异常时我必须使用“System.foo”,例如:

catch (System.DllNotFoundException ex)

但是我周围的很多程序员都倾向于使用没有标题的异常,例如:

catch  (DllNotFoundException ex)

我知道这可能是微不足道的,也许我很愚蠢,但这两种实现有什么真正的区别吗?喜欢这两者哪个更好?

感谢任何建议,

提前致谢。

【问题讨论】:

  • 其他答案都是正确的。我唯一要补充的是,两者最终都会编译成完全相同相同的东西。生成的 IL 仅使用完全限定的类型名称。这意味着两者都不是更好的做法,尽管导入常用的命名空间有助于使您的代码更短且更易于阅读。
  • 就“更好的实践”而言,大多数人倾向于使用 using 语句并从类中删除命名空间(例如“DllNotFoundException”)。它更容易阅读,因此更可取。通常,只有当您使用两个不同的命名空间和两个命名相同的类时,才会写出带有命名空间的完整类名。
  • @CodeMonkey1:我认为好的做法是将命名空间保留 1 或 2 次,如果更多则导入命名空间

标签: c# .net exception try-catch


【解决方案1】:
using System;
using System.IO;

...
catch (DllNotFoundException)
{
}
catch (IOException)
{
}

// not using that namespaces

...
catch (System.DllNotFoundException)
{
}
catch (System.IO.IOException)
{
}

所以没有区别。仅取决于您导入的具体命名空间。

【讨论】:

  • 谢谢你,我现在明白了很多,非常感谢你的时间:)
  • @CSharpningNoob:很高兴有帮助! :) 不要忘记您可以投票给好的答案并接受最适合您的答案。
【解决方案2】:

它们是表达完全相同事物的不同方式。 DllNotFoundException 是 System 命名空间的一部分,默认情况下通常包含在文件顶部的 using System; 语句中。 System.DllNotFoundException 只是它的完整类型名称。

通过将using System; 放在文件顶部,您基本上是在为您在该文件中引用的任何 System.* 类创建快捷方式。例如。您可以但不需要指定 System 命名空间。相反,您可以不使用 using System; 或任何其他使用方式,但您必须通过其全名来引用文件中的每种类型。

【讨论】:

    【解决方案3】:

    没有区别,只是风格不同。在第二个示例中,您需要有一个 using System; 语句来告诉编译器在哪里可以找到 DllNotFoundException。

    【讨论】:

    • 正如 BrandonZeider 所说,这只是风格差异。 :-)
    【解决方案4】:

    System 是一个命名空间。命名空间用于组织代码和处理命名问题。

    DllNotFoundException 类是 System 命名空间的一部分,因此它的全名是 System.DllNotFoundException

    如果您在文件的标题中包含using System;,则可以使用System 命名空间中的所有类而不指定全名,从而生成DllNotFoundException

    【讨论】:

      【解决方案5】:

      使用 System.Exception 是特定的,因为您可以在不同的库中使用相同的名称,您可以准确地指定您想要的。因此,很可能是相同的,但这意味着如果有选择,就没有歧义。

      【讨论】:

        【解决方案6】:

        在 .NET 中,命名空间用于组织类型。在这种情况下,您可以通过使用它们的全名访问这些类型 System.DllNotFoundException,或者在使用 using 语句时 - 在这种情况下使用 System,然后您可以省略所有顶级 System 类型的 System 点前缀。

        在回答您的问题时,我认为您应该使用 using,因为它通常可以使您的代码更清晰,因为对于使用的类型而言,键入和阅读的次数更少。

        当使用多个 using 时,所使用的类型可能会产生歧义,例如,如果 System 和 Foo 中存在 DllNotFoundException,其中 using System 和 using Foo 被键入......

        当有歧义时(编译器会抱怨),您可以指定整个类型名称或添加 using MyException = Foo.DllNotFoundException,然后可以使用 MyException 代替 Foo.DllNotFoundException 我知道的坏名称示例 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-24
          • 1970-01-01
          • 1970-01-01
          • 2017-02-25
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 2012-06-02
          相关资源
          最近更新 更多