Zum Hauptinhalt springen
ai-slop/csharp-null-forgivingmanuelle Behebung

Null-Forgiving-Operator.

Ein nachgestelltes `!` (`user!.Name`, `GetValue()!`), das dem Compiler sagt, ein Wert sei nicht null. Es bringt die Nullable-Warnung zum Schweigen, ohne etwas zu prüfen.

Beanstandete und saubere Form.

Jedes Beispiel zeigt genau die Codeform, nach der die Regel sucht, und dann die kleinste Version, die die Absicht bewahrt, ohne Risiken zu verstecken oder Rauschen hinzuzufügen.

csharp-null-forgiving.cs
✗ Beanstandet
public string ShippingLabel(Order order)
{
    var address = _addresses.Find(order.AddressId);
    return address!.FormatLabel();
}
Warum das anschlägt

Deterministischer Zeilenabgleich auf maskiertem Quelltext: beanstandet `!` direkt nach einem Bezeichner, `)` oder `]`, wenn darauf Leerraum, `.`, `;`, `,`, eine schließende Klammer oder das Zeilenende folgt.

csharp-null-forgiving.cs
✓ Sauber
public string ShippingLabel(Order order)
{
    var address = _addresses.Find(order.AddressId)
        ?? throw new InvalidOperationException($"Order {order.Id} has no address");
    return address.FormatLabel();
}
Was sich geändert hat

Behandle das null: per Guard mit Kontext werfen, `??` mit einem echten Standardwert nutzen oder so umbauen, dass der Typ nicht nullable ist. Nutze `!` nur, wo non-null beweisbar ist, und begründe es.

Meldet die Nullable-Analyse ein mögliches null, ist ein einziges Zeichen der schnellste Weg zum sauberen Build. Die Null-Prüfung, die die Warnung verlangt hat, wird nie geschrieben.

Wie diese Regel begründet ist.

Regel-ID

ai-slop/csharp-null-forgiving

Prüfende Engine

ai-slop

Erkennungsstrategie

Deterministischer Zeilenabgleich auf maskiertem Quelltext: beanstandet `!` direkt nach einem Bezeichner, `)` oder `]`, wenn darauf Leerraum, `.`, `;`, `,`, eine schließende Klammer oder das Zeilenende folgt.

Legitimer Code, der NICHT beanstandet wird

`!=`-Vergleiche, logische Negationen als Präfix wie `!isValid` und `!` in Strings oder Kommentaren werden nicht beanstandet.

Belege

Teil des C#-Regelsatzes von aislop. Vollwertige C#-Unterstützung, einschließlich C#-spezifischer AI-Slop-Regeln, kam mit aislop v0.14.1.