首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个字符串扩展方法没有抛出异常呢?

为什么这个字符串扩展方法没有抛出异常呢?
EN

Stack Overflow用户
提问于 2015-05-12 03:31:51
回答 2查看 7.4K关注 0票数 120

我有一个C#字符串扩展方法,它应该返回一个字符串中子字符串的所有索引的IEnumerable<int>。它完美地达到了预期的目的,并返回了预期的结果(我的一个测试证明了这一点,但不是下面的那个),但是另一个单元测试发现了它的一个问题:它不能处理null参数。

下面是我正在测试的扩展方法:

代码语言:javascript
复制
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;
    }
}

下面的测试指出了这个问题:

代码语言:javascript
复制
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void Extensions_AllIndexesOf_HandlesNullArguments()
{
    string test = "a.b.c.d.e";
    test.AllIndexesOf(null);
}

当测试针对我的扩展方法运行时,它会失败,并显示标准错误消息,表明该方法“未抛出异常”。

这很令人困惑:我明确地将null传递给了函数,但是由于某些原因,比较null == null返回false。因此,不会抛出异常,代码会继续执行。

我已经确认这不是测试的bug :在我的主项目中通过调用空比较if块中的Console.WriteLine来运行该方法时,控制台上没有显示任何内容,并且我添加的任何catch块都没有捕获任何异常。此外,使用string.IsNullOrEmpty而不是== null也有同样的问题。

为什么这种所谓的简单比较会失败呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30176121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档