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%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
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. 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.