Warum löst diese String-Erweiterungsmethode keine Ausnahme aus?

Ich habe eine C # -Stringerweiterungsmethode, die ein @ zurückgeben solltIEnumerable<int> aller Indizes eines Teilstrings innerhalb eines Strings. Es funktioniert einwandfrei für den beabsichtigten Zweck und die erwarteten Ergebnisse werden zurückgegeben (wie durch einen meiner Tests bestätigt, obwohl nicht der folgende), aber ein anderer Komponententest hat ein Problem damit festgestellt: Es kann keine Nullargumente verarbeiten.

Hier ist die Erweiterungsmethode, die ich teste:

public static IEnumerable<int> AllIndexesOf(this string str, string searchText)
{
    if (searchText == null)
    {
        throw new ArgumentNullException("searchText");
    }
    for (int index = 0; ; index += searchText.Length)
    {
        index = str.IndexOf(searchText, index);
        if (index == -1)
            break;
        yield return index;
    }
}

Hier ist der Test, der das Problem gemeldet hat:

[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Extensions_AllIndexesOf_HandlesNullArguments()
{
    string test = "a.b.c.d.e";
    test.AllIndexesOf(null);
}

Wenn der Test mit meiner Erweiterungsmethode ausgeführt wird, schlägt dies mit der Standardfehlermeldung fehl, dass die Methode "keine Ausnahme ausgelöst hat".

Das ist verwirrend: Ich habe deutlich @ übergebnull in die Funktion, aber aus irgendeinem Grund der Vergleichnull == null kehrt zurückfalse. Daher wird keine Ausnahme ausgelöst und der Code wird fortgesetzt.

Ich habe bestätigt, dass dies kein Fehler im Test ist: beim Ausführen der Methode in meinem Hauptprojekt mit einem Aufruf vonConsole.WriteLine im Null-Vergleichif block, nichts wird auf der Konsole angezeigt und keine Ausnahme wird von @ abgefangcatchblock füge ich hinzu. Außerdem mitstring.IsNullOrEmpty Anstatt von== null hat das gleiche Problem.

Warum schlägt dieser vermeintlich einfache Vergleich fehl?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage