C# – Ignorieren Sie die Nullable CS8618-Warnung in DTO-Klassen

C# – Ignorieren Sie die Nullable CS8618-Warnung in DTO-Klassen

Wenn Sie über die Funktion Nullable Reference Types verfügen (Nullable kurz) aktiviert, ist eine der Warnungen, auf die Sie stoßen, die folgende:CS8618 Nicht-Nullable-Eigenschaft X muss beim Beenden des Konstruktors einen Nicht-Null-Wert enthalten .

Diese Warnung ist in einem sehr häufigen Szenario nicht sinnvoll:

  • Sie haben eine DTO-Klasse mit einem Nicht-Nullwert Referenztyp, z. B. eine Zeichenfolge.
  • Es wird definitiv mit einem Wert aus den Daten gefüllt und ist nicht null.
  • Daher wissen Sie, dass Sie keinen Anfangswert für die Eigenschaft festlegen müssen.

Sie können die Warnung einfach ignorieren, wenn sie DTOs betrifft. Dies erspart Ihnen den unnötigen Versuch, dieses Nicht-Problem mit etwas wie dem Folgenden zu „beheben“:

public class Coder
{
    public string Name { get; set; } = null!;
}
Code language: C# (cs)

Ja, dadurch verschwindet die Warnung, aber es ist ziemlich sinnlos. Außerdem haben Sie wahrscheinlich viele DTOs mit vielen Eigenschaften, was bedeutet, dass Sie immer wieder auf dieses Problem stoßen und es immer wieder „beheben“ müssen. Sparen Sie sich lieber die Mühe und ignorieren Sie sie. Ich zeige unten zwei Optionen.

Option 1 – Nur die Warnung für DTO-Klassen unterdrücken

Möglicherweise möchten Sie nur die Warnung für DTO-Klassen unterdrücken. Der Grund dafür ist, dass Sie es möglicherweise hilfreich finden, um auf potenzielle Probleme in Nicht-DTO-Klassen hinzuweisen. Das ist also ein zielgerichteter Ansatz – Sie behalten das Gute und werfen das Schlechte weg.

Eine Möglichkeit, die Warnung für Ihre individuellen DTO-Klassen zu deaktivieren, ist die Verwendung eines Pragmas wie diesem:

#pragma warning disable CS8618
public class Coder
{
    public string Name { get; set; }
    public string Language { get; set; }
    public string Project { get; set; }
}
#pragma warning restore CS8618
Code language: C# (cs)

Hinweis:Abhängig von Ihrer Projektstruktur und Namenskonventionen können Sie möglicherweise eine Editorconfig-Datei verwenden, um die Warnungen für alle DTOs mithilfe eines Musters zu unterdrücken. Verwenden Sie es mit Vorsicht, da dies das Risiko birgt, dass die Warnung für Nicht-DTO-Klassen, die zufällig mit dem Muster übereinstimmen, versehentlich unterdrückt wird.

Option 2 – Warnung auf Projektebene unterdrücken

Wenn Sie diese Warnung überhaupt nicht hilfreich finden, können Sie sie auf Projektebene mit der NoWarn-Einstellung unterdrücken:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <NoWarn>CS8618</NoWarn>
  </PropertyGroup>

</Project>
Code language: HTML, XML (xml)

Dies ist auch ein nützlicher Ansatz, wenn ein Projekt nur DTO-Klassen enthält.

Nullbare Warnungen nicht deaktivieren

Ich würde nicht vorschlagen, Nullable-Warnungen auf Dateiebene zu deaktivieren, wie hier:

#nullable disable warnings
public class Coder
{
    public string Name { get; set; }
}
Code language: C# (cs)

Warum nicht? Weil dies ALLE Nullable-Warnungen in der Datei deaktiviert, anstatt nur die spezifische Warnung zu deaktivieren, die Sie nicht möchten. Wenn Sie dieser Datei irgendwann Logik hinzufügen (anstatt nur automatische Eigenschaften zu haben), wird diese Logik nicht auf Nullable-Probleme überprüft.