I've looked around a bit but haven't been able to find an answer to how the new C# 6.0 compiler breaks down the new null propagation command for something such as the following:
BaseType myObj = new DerivedType();
string myString = (myObj as DerivedType)?.DerivedSpecificProperty;
What I want to know is how exactly it handles this.
Does it cache the as
cast into a new DerivedType
variable (i.e., this is just syntactical sugar for an as
cast followed by an null comparison).
Or if it actually as
cast it, check for null, then if not null, recast and keep going.
Does it cache the
as
cast into a newDerivedType
variable (i.e., this is just syntactic sugar for anas
cast followed by an null comparison).
Yes.
Your code will be compiled to something like this:
BaseType myObj = new DerivedType();
DerivedType temp = myObj as DerivedType;
string myString = temp != null ? temp.DerivedSpecificProperty : null;
You can see that with this TryRoslyn example (though, as hvd commented, by looking at the IL you can see there isn't actually a DerivedType
variable. The reference is simply stored on the stack).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With