2012-04-13 10 views
4

Ich verwende eine Dictionary<string, string> und fügen Sie ein Element mit einem Null-Wert (in meiner realen Situation ist es eine Variable).ReSharper zeigt mögliche Null-Zuweisung auf Wert für generische Sammlung

Dies führt zur Warnung "Mögliche 'Null' Zuweisung zu Entitäten, die mit 'NotNull' Attribut gekennzeichnet sind". Possible 'null' assignment

Wenn ich ReSharper es in eine Sammlung initialisieren lässt, zeigt es keine Warnungen an.

var testDictionary = new Dictionary<string, string> {{"Test", null}}; 

Also, ist es wahr, dass der Wert eines Wörterbuchs mit 'NotNull' Attribut markiert ist? Oder ist etwas anderes los?

Bearbeiten: Diese Frage unterscheidet sich nicht so sehr von Resharper: Possible null assignment to entity marked with notnull attribute, aber die Antworten auf meine Frage sind anders (es war ein Fehler in R #, und das Hinzufügen von Nullelementen zu einer Sammlung ist keine gute Idee).

+0

Mögliche Duplikat [ReSharper: Mögliche null Zuordnung zu Einheit mit notnull Attribut gekennzeichnet] (http: // Stackoverflow. com/questions/8979008/resharper-possible-null-Zuweisung-zu-Entity-markiert-mit-Notnull-Attribut) –

Antwort

2

Dies war a bug, fixed in 6.0.

Also ja, etwas anderes ist los - Sie benötigen eine R # aktualisieren;)

+0

Es ist ein interessanter Fehler.Wie könnte ReSharper glauben, dass die Entity mit einem Attribut "NotNull" gekennzeichnet wurde, wenn dies nicht der Fall ist? Wie auch immer, du hattest Recht. – comecme

+0

Ich denke, dass die externen Anmerkungen für den BCL zu einem Zeitpunkt manuell erzeugt worden sein könnten, also könnte es dort einfach ein einfacher Datenfehler sein. – AakashM

7

Im Allgemeinen ist es eine schlechte Praxis, null Elemente in eine Sammlung zu setzen. Die überwältigende Mehrheit des Codes, der eine Auflistung konsumiert, setzt voraus, dass die Werte in der Auflistung nicht null sind. Wenn null ein gültiges Collection-Element ist, verkompliziert es wirklich den gesamten Konsum-Code.

Zum Beispiel müssen Sie im Wesentlichen

foreach (var cur in theCollection) { 
    if (cur.Value == null) { 
    continue; 
    } 
    ... 
} 

Für diesen speziellen Fall schreiben es sieht einfach wie R # ist die Auflistungsinitialisierer Fall fehlt. Es ist definitiv unerwartet für null in einer Sammlung zu sein.

Statt null warum nicht String.Empty verwenden?

+2

Ja, aber nur "im Allgemeinen". Die Verwendung von "Null" -Werten ist nicht verboten oder nicht plausibel. –

+2

In der Tat, Henk. Es gibt einen sehr realen logischen Unterschied zwischen string.empty und null. – Robaticus

+2

@HenkHolterman es ist sicherlich erlaubt, aber ich würde sagen, es ist auch genauso unerwartet. Das Setzen von null in eine Sammlung verstößt gegen die Regel "überrasche deine Nutzer nicht". – JaredPar

0

ReSharper fehlerhaft. Sie können das Menü verwenden, um Optionen für "Possible Null ..." zu prüfen und es in "Do Not Show" zu ändern, wenn Sie die Warnung deaktivieren möchten.

Der Code ist völlig in Ordnung, obwohl ich mir nicht vorstellen kann, warum Sie Null hinzufügen würden (in der Regel Punkte auf schlechtes Design/Algorithmus, wo es eine sauberere Möglichkeit ist, es zu tun).

Verwandte Themen