Kann ich CodeAnalysis Warnung ignorieren: Ersetzen-String == „“ mit string.IsNullOrEmpty?

StackOverflow https://stackoverflow.com/questions/1661024

  •  12-09-2019
  •  | 
  •  

Frage

Ich habe Code ähnlich wie diese:

string s = CreateString();
if (s == "") foo(s);

Wenn s "" entspricht, sollte foo aufgerufen werden. Wenn Zeichenfolge null ist, was nie passieren sollte, dann wird eine Nullreferenceexception ist in Ordnung (wie das ist immerhin eine Ausnahmesituation).

CodeAnalysis sagt mir für s.IsNullOrEmpty zu testen. Dies würde die Funktionalität in einer nunintended Art und Weise verändern.

Performance ist kein Thema.

Ist es sicher, die zugehörige CA1820 Warnung zu unterdrücken?

Edit:. aktualisiert Codebeispiel und Text besser zu meinem Fall spiegelt

Bearbeiten: Das ist der (leicht verändert) eigentliche Code (es ist in einer Standard-IXmlSerializable Implementierung):

public void ReadXml (XmlReader reader)
    // ...
    string img = reader.ReadElementString ("Image");
    if (img != "") {
        Image = Image.FromFile(img);
    }
    // ...
War es hilfreich?

Lösung

Es wird sich anders verhalten in Bezug auf NULL-Werte, so hängt es, was Sie wollen passieren; Sie erwähnen, dass NullReferenceException OK wäre, aber es ist nichts im Code zitierte das würde dies erhöhen, also warum es unerwartete Fehler stromabwärts verursachen könnte.

I nie , aber ich bin immer hinzuzufügen versucht:

static bool IsNullOrEmpty(this string value) {
    return string.IsNullOrEmpty(value);
}

so kann ich verwenden:

if (s.IsNullOrEmpty()) foo();

Andere Tipps

Specs:

  

Wenn s "" entspricht, sollte foo aufgerufen werden.   Wenn Zeichenfolge null ist, der sollte nie   passieren, dann eine Nullreferenceexception   ist in Ordnung.

Just testen Sie die Stringlänge als adviced in die CodeAnalysis Regel :

if (s.Length == 0) foo(s);

Ihre Frage:

  

Ist es sicher, die im Zusammenhang zu unterdrücken   CA1820 Warnung?

Sie können es ignorieren, wird Ihr Code arbeiten, aber ich würde es nicht empfehlen, folgen Sie den Richtlinien , so viel wie möglich. Auch wenn das Thema (Performance) kein Problem ist, wird Ihr Code sein konsistenter und Sie gewöhnen zu Standard-Code zu schreiben.

Jede Code-Analyse-Warnung hat Dokumentation zugeordnet, die Sie durch highligting die Warnung zugreifen und Drücken von F1 . Sie können auch auf der Position der rechten Maustaste um Hilfe zu erhalten.

In jedem Fall ist hier die Dokumentation, die diese besondere Warnung erklärt .

Nach dieser Dokumentation ist es „sicher eine Warnung dieser Regel zu unterdrücken, wenn die Leistung ist kein Problem“.

Es wäre besser, den Test zu schreiben, wie:

if(s != null && s == "")

Sie können dann einen Nullwert in einer anderen if-Anweisung verarbeiten

Sie sind nicht wirklich die Warnung zu ignorieren, haben Sie den Code angesehen und entschieden, dass die Warnung nicht gilt. Dies ist eine durchaus vernünftige Bedingung, unter der die Warnung zu unterdrücken.

reine Spekulation

Ich wünschte, ich wusste, dass ein wenig mehr über das, was Sie jedoch vorhatten. Ich vermute, dass es ein besserer Weg, um es zu behandeln. Das Muster erinnert mich an der Rückkehr eine Fehlermeldung oder leer, um den Erfolg eines Verfahrens zu signalisieren. Wenn das der Fall ist, würde ich prüfen, entweder void zurückgibt und werfen eine Ausnahme bei einem Fehler oder Bool Rückkehr und nur Ausnahmen zu werfen, wenn die Meldung kritisch und Rückkehr true / false sonst.

Wenn null OK ist, werden Sie so oder so in Ordnung sein.

Ja.

Aber ich würde mit CodeAnalysis stimmt String.IsNullOrEmpty eine sichere Wahl ist.

Nicht Umgang mit Ausnahme während Sie Can gennerally eine schlechte Idee ist so CA Recht, dass entweder Sie müssen die Ausnahme behandeln null als leer oder handhaben. Eine Null-Referenz Ausnahme verursacht durch einen Rückgabewert verwendet, ist eine sehr schlechte Sache. Am allerwenigsten setzte in einem Debug.Assert (s! = Null) und vergleichen zu string.Empty

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top