vorgeschlagen Ich habe ein seltsames Problem mit der Objektinitialisierersyntax.NullReferenceException mit Objektinitialisierer von Resharper
Hier sind meine Beispielklassen:
public class Foo
{
public Bah BahProp { get; set; }
}
public class Bah
{
public int Id { get; set; }
}
Betrachten wir drei Möglichkeiten, folgende ein Objekt zu initialisieren:
Die alte, ausführliche, aber explizite Weise richtig funktioniert:
var foo1 = new Foo();
foo1.BahProp = new Bah();
foo1.BahProp.Id = 1;
// correctly initialized
Die zweite So benutze ich immer object initializer Syntax:
Ein dritte Weg resharper hat meinen Kollegen mit einer anderen resharper Version vorgeschlagen (ist es ein Bug?):
var foo3 = new Foo
{
BahProp = { Id = 1 }
}; // NullReferenceException
Was der letzte Ansatz ist anders zu machen?
Meine Nachschärfer Version ist 2016.1.1, meine Kollegin war am 10.02. Mein Reshaper schlug den zweiten Weg vor. Aber was macht der dritte Weg und wann ist er nützlich?
Update: Es scheint also, dass es eine schlechte Resharper-Sugestion war, den letzten Weg zu benutzen, deshalb haben sie es inzwischen geändert, um den zweiten Weg zu benutzen.
Sie können die NullReferenceException
vermeiden, wenn Sie die dritte Möglichkeit verwenden möchten, indem Sie alle Eigenschaften/Felder initialisieren, die Referenztypen inline oder im Konstruktor sind.
Ich werde definitiv nicht diese seltsame Eigenschaft Zuweisung Syntax verwenden.
Ich würde die kompilierte .dll mit ILSpy oder einem anderen Decompiler überprüfen, um zu sehen, was der Compiler anders gemacht hat – Waescher
* "Ich werde definitiv nicht diese seltsame Eigenschaft Zuweisung Syntax" *. – Sinatr