gpt4 book ai didi

c# - 设计选择 : Do I want extension methods to throw exceptions on null?

转载 作者:太空狗 更新时间:2023-10-29 20:01:54 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
C#: Best practice for validating “this” argument in extension methods

我对设计选择持矛盾态度,想听听 SO 社区的意见。我在这里举的例子只是必须做出这种设计选择的一种可能情况——实际上,可能还有更多的情况。欢迎回答此特定案例和更一般的方法,也欢迎有关如何在特定案例中做出决定的指南。

基本上,我想知道如何考虑这个:当编写一个扩展方法时,如果将空引用作为 this 传递,它本质上不会失败。例如,是否应该对参数执行空检查?

示例:

我正在 IEnumerable<T> 上编写扩展方法这将遍历集合并执行一些 Action<T> - 基本上,这就是它要做的:

public static void Each<T>(this IEnumerable<T> collection, Action<T> action)
{
foreach (var t in collection)
{
action.Invoke(t);
}
}

我无法决定的是,如果null,这个扩展方法应该做什么?被传递到任一参数。如果我不添加任何空检查,我将得到一个 NullReferenceExceptionaction.Invoke(T) , 但如果 collectionnull for 循环将静静地什么都不做(即使 action 也是 null ... 也不会抛出异常)。

我决定为 action 添加空检查, 所以我可以抛出 ArgumentNullException而不是 NullReferenceException .但是我想对 collection 做什么呢? ?

选项 1: 添加空检查,然后抛出 ArgumentNullException .

选项 2:只是默默地让方法不做任何事情。

哪个在我将来可能想使用该方法的地方更有用?为什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com