设计选择:我是否希望扩展方法将null抛出异常? [重复]

问题描述

|                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

        如果在LINQ中调用的集合为空,则Microsoft抛出ArgumentNullException。这实际上更多的是样式问题,但与扩展方法的行为方式一致。 @ m0sa是正确的,尽管您将从您的foreach中获得一个空引用,但是我会说要检查top并抛出ArgumentNullException。这样,您将与LINQ的功能相提并论。 例如,如果您在反编译器中查看Any(),则会看到:
public static bool Any<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull(\"source\");
    }
    using (IEnumerator<TSource> enumerator = source.GetEnumerator())
    {
        if (enumerator.MoveNext())
        {
            return true;
        }
    }
    return false;
}
    ,        绝对应该执行
null
检查并抛出
ArgumentNullException
,以避免在代码内部难以理解
NullReferenceExceptions
。 通常,我会避免将ѭ1视为en \“ empty \”
IEnumerable<T>
。只是使用
Enumerable.Empty<T>()
来避免
null
集合的特殊情况。 如果您决定在扩展方法中进行“ 1”检查,则应考虑“急切地”进行。如果在扩展方法中使用
yield return
,直到迭代开始之前,实际上不会评估它。您将扩展方法分为两部分。检查参数的\“ eager \”部分和
yield return
元素的\“ lazy \”。     ,        首先:我很确定如果ѭ12等于ѭ1,将会有ѭ11。因此,您的那部分问题根本没有问题。关于其余部分:通过检查ѭ1并抛出不同的异常,您有任何收获吗?我认为:不!因此,我不会因根本没有帮助的检查而使代码混乱。     ,        如果集合参数为
null
,我将抛出throw11ѭ。这是从思考如果它是
null
时的行为会发生什么,而ѭ18just恰好只是一种常规方法-我期望会抛出
NullReferenceException
。 编辑: 根据马丁的评论和对此的进一步研究,我收回了我所说的话。在这种情况下,似乎不应该抛出“ 11”,因为微软建议改用“ 2”。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...