+ String-Concat-Operator mit einem Null-Operanden

8

Ein Kollege hat mir ein sehr merkwürdiges Verhalten gezeigt und ich würde gerne wissen, ob mir jemand den Grund dafür erklären könnte.

Ein einfacher Konstruktor mit 2 String-Parametern:

%Vor%

Methode ist:

%Vor%

Wenn dieser ctor innerhalb einer aspx-Seite mit str2 als null aufgerufen wird, funktioniert alles gut, denn wenn ein Operand der String-Verkettung + ist null , wird eine leere Zeichenfolge ersetzt.

Aber wenn dieser ctor mit str2 als null in einem Hintergrundthread aufgerufen wird, wird ein NullReferenceException ausgelöst.

Das Problem wurde gelöst, indem str2 != null vor der Verwendung getestet wurde, aber ich würde gerne wissen, warum derselbe Code manchmal eine Ausnahme auslöst, manchmal nicht!

Hier ist der Stack-Trace:

%Vor%     
Sylv21 25.07.2013, 14:07
quelle

2 Antworten

4

Es gab einen obskuren Fehler in der .NET Framework-Implementierung der String-Verkettung, aber nur die Verkettungen von 4 Objekten, wobei eines der Objekte nicht null ist und eine Überschreibung von% co_de bietet %, die null zurückgegeben hat. Diese Situation ist eindeutig nicht der Fall.

Diese Situation wird höchstwahrscheinlich durch eine der folgenden Ursachen verursacht:

  • ToString ist null, wenn _vars
  • aufgerufen wird
  • Aufgrund eines Missbrauchs von Method in einer Multithread-Anwendung wurde der interne Status von _vars beschädigt, was zu einem _vars führt, wenn der Operator NullReferenceException verwendet wird.
Sam Harwell 25.07.2013, 15:15
quelle
3

Das Problem liegt in der Implementierung des Method Objekts. Da die + -Operator-Implementierung einen Nullwert als leere Zeichenfolge interpretiert . Der tatsächliche Nullwert tritt niemals in den Konstruktor ein, wenn er in str2 festgelegt wurde. Auf der gegenüberliegenden Seite wird str1 direkt als Nullwert eingegeben und kann je nach Implementierung eine Null-Referenzausnahme verursachen.

    
Marwie 25.07.2013 14:13
quelle

Tags und Links