C# under the covers II
An initialisation problem I hit recently, a null pointer exception when initialising an object via an initialiser statement. This program is a simplified example --
which throws when initializing b
.
Putting them together like this, it's obvious what I missed out in the second initializer : I'm not creating a new object to assign. But it's not obvious what the second case is actually doing, even though it compiles -- which in itself initially surprised me. So let's look at the IL and find out what that initialisation is actually doing...
which actually resolves to something like
So if we add a constructor and a sensible ToString
to the type being initialised, thus
we see that the initialisation of a
replaces the constructed values; whereas b
adds to them.
Not sure how useful this is as the dictionary literal form only works in initializers like this, but it's another bit of living and learning.
No comments :
Post a Comment