Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 系统异常还是仅仅异常_C#_.net_Exception_Try Catch - Fatal编程技术网

C# 系统异常还是仅仅异常

C# 系统异常还是仅仅异常,c#,.net,exception,try-catch,C#,.net,Exception,Try Catch,我是一个编程新手,老实说,我学到的每一件事我都想确保我做得正确。 我的问题是,在MSDN网站上,它说明了在处理异常时,我必须使用“System.foo”,例如: catch (System.DllNotFoundException ex) catch (DllNotFoundException ex) 但我周围的许多程序员都倾向于使用不带标题的异常,例如: catch (System.DllNotFoundException ex) catch (DllNotFoundExceptio

我是一个编程新手,老实说,我学到的每一件事我都想确保我做得正确。 我的问题是,在MSDN网站上,它说明了在处理异常时,我必须使用“System.foo”,例如:

catch (System.DllNotFoundException ex)
catch  (DllNotFoundException ex)
但我周围的许多程序员都倾向于使用不带标题的异常,例如:

catch (System.DllNotFoundException ex)
catch  (DllNotFoundException ex)
我知道这可能很琐碎,也许我问得很愚蠢,但这两种实现有什么真正的区别吗?两种方法中哪一种更好

谢谢你的建议


提前感谢。

它们是表达完全相同事物的不同方式。DllNotFoundException是系统名称空间的一部分,通常包含在使用系统的
语句位于文件顶部。System.DllNotFoundException只是它的完整类型名


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

没有区别,只是样式不同而已。在第二个示例中,您需要一个
使用系统语句,告知编译器在何处查找DllNotFoundException

using System;
using System.IO;

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


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

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

DllNotFoundException
System
命名空间的一部分,因此其全名为
System.DllNotFoundException


如果包括使用系统的
到文件头中,您可以使用
系统
命名空间中的所有类,而无需指定全名,从而导致
DllNotFoundException

使用系统。异常是特定的,因为您可以在不同的库中使用相同的名称,您可以准确地指定所需的名称。因此,很可能是相同的,但这意味着如果有选择,就没有歧义。

在.NET中,名称空间用于组织类型。在本例中,您可以使用这些类型的全名System.DllNotFoundException来访问它们,或者在使用using语句时—在本例中,使用System,您可以省略所有顶级系统类型的System点前缀

在回答您的问题时,我认为您应该使用using,因为它通常会使您的代码更干净,因为对于所使用的类型,键入和读取的次数更少

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


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

正如BrandonZeider所说,这只是一个样式差异。:-)谢谢你,我现在明白得更清楚了,非常感谢你的时间:)@csharpingnoob:很高兴你帮了我的忙!:)别忘了,你可以投票选出好的答案,然后接受最适合你的答案。其他答案都是正确的。我要补充的唯一一点是,两者最终编译成完全相同的东西。生成的IL仅使用完全限定的类型名。这意味着这两种做法都不是更好的做法,尽管导入常用名称空间有助于缩短代码并使其更易于阅读。就“更好的做法”而言,大多数人倾向于使用using语句并从类中删除名称空间(例如“DllNotFoundException”)。它更容易阅读,因此更可取。通常,只有当您使用两个不同的名称空间和两个名称相同的类时,才会写出带有名称空间的完整类名。@CodeMonkey1:我认为最好的做法是将名称空间保留1到2次,如果出现更多次,则导入名称空间