Note that there are some explanatory texts on larger screens.

plurals
  1. PODisposal Order in C# Using Blocks
    primarykey
    data
    text
    <p>I'm really bothered by having to nest <code>using</code> blocks in C#. It's not elegant and it takes up a lot of space. In some cases it appears to be unavoidable because I need to declare variables of different data types, but it seems like the single-type case should be possible to simplify. What I mean by "the single-type case" is when several variables of the same type are declared in series. Here's an example of what I'm talking about:</p> <pre><code>class Program { static void Main(string[] args) { using (A a = new A("a"), b = new A("b")) { } } class A : IDisposable { string n = null; public A(string name) { n = name; Console.WriteLine(String.Format("Creating {0}", n)); } public void Dispose() { Console.WriteLine(String.Format("Disposing {0}", n)); } } } </code></pre> <p>The way I want this to work is that <code>a</code> is constructed before <code>b</code>, and that <code>b</code> is disposed before <code>a</code>. Unfortunately there doesn't appear to be any direction in the C# specification as to how it should actually happen. It appears as though Microsoft's C# compiler treats it like this, as this is the output of running the above program:</p> <pre><code>Creating a Creating b Disposing b Disposing a </code></pre> <p>However, I have no way of ensuring that this is deterministic behavior. Can someone either confirm or refute the idea that this sequence is deterministic? References would be great. And obviously, if it's prone to breakage (undocumented, etc.) it's probably not useful, but that's a good thing to know.</p> <p>There's already a similar question about <a href="https://stackoverflow.com/questions/75722/is-there-a-better-deterministic-disposal-pattern-than-nested-usings-in-c">deterministic disposal</a> that talks about the multiple-type case, and I understand that there's no real solution there aside from clever syntax tricks. Most of the answers there miss the point, anyway. My question is just about the single-type case and whether this disposal is deterministic and dependable or not. Thanks.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload