我有一些像这样的代码:
public void someMethod (Object x)
{
if (x == null) throw new ArgumentNullException ();
// more code...
}
我现在应该这样做:
public void myMethod (Object z)
{
someMethod (z);
}
或者这个:
public void myMethod (Object z)
{
if (z == null) throw new ArgumentNullException ();
someMethod (z);
}
注意:我更喜欢这门课程的执行速度
答案 0 :(得分:3)
在我看来,所有公共方法都应验证其输入,即使它有点多余。话虽如此,我经常使用条件编译指令编译更昂贵的验证和代码合同,以便发布版本只执行最关键的诊断和验证。
检查null参数是一项重要而且成本低廉的操作,它对数百万次调用的性能影响最小。
所有调用公共内部方法的重载方法可能会执行较少的检查,并知道它们的实际实现执行完全验证。
对于它的价值,我从微软看到的大多数BCL源代码都是在更多验证,诊断和合同遵守方面而不是更少。
答案 1 :(得分:0)
在我看来,如果传递给它的任何参数是someMethod
,null
应该负责抛出异常。理想情况下,如果somemethod
为mymethod
,则不应从z
致电null
。您应该在myMethod
中添加check for null,但让somemethod
抛出异常
public void myMethod (Object z)
{
someMethod (z);
}
我会建议上面的那个。顺便说一下,这些微观级别优化不会给你带来任何显着的性能提升
答案 2 :(得分:0)
我会这样做:
因此,在您的情况下,我不会再次检查myMethod
中的空值,除非myMethod
也依赖于z
不是null
。我怀疑是否存在任何实际相关的速度差异(请记住:“过早优化是所有邪恶的根源”)