Regardless of what terminates the using statement, an exception or just reaching the end of the block or whatever, Dispose() for the object created by the using will always be called.
That's the beaty about "using", you don't have to worry about cleaning up.
HTH
>The Socket class does implement IDisposable so I should be able to use the using () {}.
>One thing I don't understand about using using is what happends if an error is thrown outside of the using statement?
>
>Example:
>
>using (ResourceType resource = expression)
>{
> //code that throws an error that is not handled inside the using statement
>}
>
>Would it still clean up stuff for me even if the error throws it outside the using statement?
>
>Einar
>
>
>>What you could do if the Socket class suports IDisposable is use a using statement, that way, you don't have to worry about writing a finnally block, the Scocket object will dispose itself.
>>
>>
>>using (Socket udpSocket = new Socket(ipEP.Address.AddressFamily,SocketType.Dgram,ProtocolType.Udp))
>>{
>> // some more code
>>}
>>
>>
>>
>>HTH
>>>I can not remember the exact syntax for what I want to do, but I am sure this is used all over the place.
>>>Considder the code:
>>>
>>>try
>>>{
>>> // some code
>>> IPEndPoint ipEP = new IPEndPoint(paraIPAddress, iPort);
>>> Socket udpSocket = new Socket(ipEP.Address.AddressFamily,SocketType.Dgram,ProtocolType.Udp);
>>> // some more code
>>>}
>>>catch(Exception ex)
>>>{
>>> //Do something if exception is thrown
>>>}
>>>finally
>>>{
>>> //I need some code here to test if the socket is created/initialized
>>> udpSocket.Close();
>>>}
>>>
>>>
>>>The contents of the code is not really important, but what can I use in the
finally block to ensure that the object that I am trying to call the "clean-up" code for (in this case Close()) has been initialized? What if an error was thrown before the line
Socket udpSocket = new Socket(...), I want to call Close() on the udpSocket in the finally block but only if the object udpSocket is defined.
>>>
>>>Thanks,
>>>Einar