public static IFoo Bar<T>(this IFoo target, ...)
{
// I'm curious about how useful this check is.
if (target == null) throw new ArgumentNullException("target");
...
}
(1) 上面的代码对我来说似乎很奇怪,因为我觉得无论如何调用代码都是要检查的代码。该领域的扩展方法是否有一些微妙之处?
(2) 是否存在利用目标可以为空这一事实的合法模式?我问这个问题是因为想知道为什么在空引用上调用扩展方法不会像在空引用上调用实例方法一样生成运行时异常。
考虑 null 可以作为方法的参数。还要考虑扩展方法foo.Bar<int>();
实际上只是语法糖IFooExtensions.Bar<int>(foo);
你会看到,是的,参数确实可以为空,所以如果你正在对参数做一些事情,测试它是否为空肯定是合适的(或者简单地让NullReferenceException
被扔掉,选择你自己)。
注意:仅仅通过以下方式您不会得到异常calling它带有一个空引用的对象,因为请记住该方法实际上并不属于该对象。仅当 (a) 您自己故意抛出异常或 (b) 方法主体实际上通过尝试使用 null 实例而导致异常时,您才会得到异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)