I think that it doesn't matter, because there's no way for you to get
your hands on the return value, anyway. Think of it this way:
MyClass myVar = null;
try
{
myVar = new MyClass();
}
catch (Exception ex)
{
Console.WriteLine("myVar is {0}", myVar == null ? "(null)" :
myVar);
}
What will the WriteLine write out? Always "(null)". Why? Because
regardless of what the "new" operation returns, the assignment
operation "myVar =" will never be executed, because the constructor
threw an exception, so execution will continue immediately with the
Console.WriteLine statement, and myVar will never be altered.
The bottom line is that there is no way to instruct the compiler to
instruct the CLR to complete the assignment operation if the
constructor throws an exception, so even if the "new" returns a
partially constructed object, you can't assign that to anything.