Почему этот метод расширения строки не вызывает исключение?

У меня есть метод расширения строки C #, который должен вернутьIEnumerable<int> всех индексов подстроки в строке. Он отлично работает по назначению, и ожидаемые результаты возвращаются (как доказано одним из моих тестов, но не тем, что приведен ниже), но другой модульный тест обнаружил проблему с ним: он не может обрабатывать нулевые аргументы.

Вот метод расширения, который я тестирую:

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;
    }
}

Вот тест, который выявил проблему:

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

Когда тест выполняется для моего метода расширения, он завершается неудачно со стандартным сообщением об ошибке, согласно которому метод «не выдал исключение».

Это сбивает с толку: я четко прошелnull в функцию, но по какой-то причине сравнениеnull == null возвращаетсяfalse, Следовательно, исключение не выдается, и код продолжается.

Я подтвердил, что это не ошибка теста: при запуске метода в моем основном проекте с вызовомConsole.WriteLine в нулевом сравненииif блок, на консоли ничего не отображается и никакое исключение не перехватываетсяcatch Блок я добавляю. Кроме того, используяstring.IsNullOrEmpty вместо== null имеет ту же проблему.

Почему это якобы простое сравнение не удается?

Ответы на вопрос(2)

Ваш ответ на вопрос