Objektinitialisierung kann vereinfacht werden

Objektinitialisierung kann vereinfacht werden

Während alle vorherigen Vorschläge auch gut sind, würde ich einen dritten Weg hinzufügen. Deaktivieren Sie diese Warnungen und ignorieren Sie sie. Obwohl ich die Versuche von Microsoft schätze, jeden effizient und sauber programmieren zu lassen, ist dies meiner Meinung nach kein guter Vorschlag und führt tatsächlich zu schwer lesbarem und editierbarem Code.

Erstens verwandelt dies die Objektinitialisierung im Wesentlichen in eine einzige Codezeile, und alle Fehler werden als solche gemeldet. Wenn Sie 20 Datenbits in ein Objekt geladen hätten, würde Ihnen in der ersten Zeile ein Fehler angezeigt und nicht mitgeteilt, welche Eigenschaft fehlerhaft ist. Das Debuggen hilft nicht, da Ihnen der gesamte Codeblock als Fehler angezeigt wird.

Zweitens, wenn Sie in Zukunft den Code erweitern und zusätzlichen Code für eine bestimmte Eigenschaft hinzufügen müssen, müssen Sie dies jetzt in separatem Code tun. Dies trägt zur Fragmentierung bei und trennt zusammengehörige Codebits (vielleicht ist das umstritten).

Beide Probleme mögen wie sehr geringfügige Dinge erscheinen, aber die Warnung schlägt eine Lösung vor, die ebenfalls eine sehr geringfügige Sache ist. Um Ihre Initialisierung einzuklammern, haben Sie Ihren Code schwieriger zu debuggen und zu ändern. Das ist meiner Meinung nach ein schlechter Kompromiss.

Sie können die Warnung deaktivieren, indem Sie mit der rechten Maustaste auf die Warnung klicken und „unterdrücken“ auswählen, oder gehen Sie zu Extras> Optionen> Texteditor> C#> Codestil> Allgemein> Objektinitialisierer bevorzugen> und setzen Sie die Warnung auf Keine oder setzen Sie die Voreinstellung auf Nein.


1.

Vorher :

TreeNode node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage);
node.Tag = drive;

Nach:

var node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage) {
    Tag = drive
};

2.

Vorher :

DirectoryInfo di = new DirectoryInfo(dir);
TreeNode node = new TreeNode(di.Name, 0, 1); //this line

Nach :

var node = new TreeNode((new DirectoryInfo(dir)).Name, 0, 1);

3.

Vorher:

OleDbCommand select = new OleDbCommand();//this line
select.Connection = cnDTC;
select.CommandText = string.Format("SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({0})",
      strSQL2);

Nach:

var select = new OleDbCommand(
      String.Format("SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({0})", strSQL2), 
      cnDTC);

3. (mit String-Interpolation):

var select = new OleDbCommand($"SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({strSQL2})", 
      cnDTC);

Lesen Sie weiter unter var (es ist wirklich nicht böse) und etwas mehr Dokumentation über Objekt- und Sammlungsinitialisierer


Ich hatte ein ähnliches Problem mit diesem Code:

        Customer oCust = new Customer();
        oCust.Address = txtAddress.Text;
        oCust.City = txtCity.Text;
        oCust.State = txtState.Text;

Und löste es mit diesem Code:

        Customer oCust = new Customer()
        {
           Address = txtAddress.Text,
           City = txtCity.Text,
           State = txtState.Text
        };

Sooo ... um die Warnmeldung (IDE0017) (in VS 2017/2019) auszuschalten:
Klicken Sie auf Tools Tab. Gehen Sie dann nach unten zu Optionen...
Dann | Texteditor | C# | CodeStil | Allgemeines |
Unter Expressoin-Einstellungen Ändern Sie Objektinitialisierer bevorzugen auf Nein .

Alternativ können Sie die Einstellung auf Ja belassen und ändern Sie den Schweregrad von Warnung auf Suggestion .
Jetzt wird es nur noch als Meldung in der Fehlerliste angezeigt.