我是否应该在C#中使用try {}或using()?

Iva*_*nov 3 c# using try-catch

我是C#的新手,直到我在Depth中找到了C#,直到我发现了C#,在Delphi中有一个try {}语句也在C#中实现.

但是,我看到你们中的一些人提到"使用(){}比尝试{}更好".

这是一个例子:

   //This might throw an exception
   sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   sock.Connect(ip, port);

   //Try statement
   try
   {
       sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
       sock.Connect(ip, port);
   catch
   {
   }

   //using(){}
   using(sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   {
          sock.Connect(ip, port);
   }
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 如果在"using"语句中发生异常会发生什么?

  2. 什么时候应该使用"使用"而不是"尝试",何时"尝试"使用"使用"?

  3. 什么是"使用"声明的目的?

提前致谢!

Ste*_*eve 10

使用和尝试是两个非常不同的东西,并且是完全正交的.

如果发生异常并且不在try块中,则堆栈将展开,直到找到适当的异常处理程序.这与using语句无关.

使用using {}时要确保对象在使用后正确地收拾了-在你的榜样袜子将使用块后正确处置.

有关using在网络上使用seach(或SO)的更多信息,请参阅" IDisposable".


Chr*_*ews 7

当您创建(和使用)实现IDisposable的新对象时,将使用using语句.即使在using块中引发异常,using语句也将始终处置该对象.

try/catch语句通常用于完全不同的目的,但try/catch/finally或try/finally类中的finally块与无条件执行时的目的相同.使用声明购买自动调用处理.

我推荐David Hayden的文章:C#Code Review - C#Using Statement - Try/Finally - IDisposable - Dispose() - SqlConnection - SqlCommand

关于Try/Catch/Finally 的使用声明
MSDN文章的MSDN文章