当前位置: 首页 > 编程语言 > C#

为什么允许空对象的扩展方法?分享

时间:2023-04-10 14:06:27 C#

为什么允许空对象的扩展方法?允许对空对象调用扩展方法有什么意义?这让我不必要地检查扩展方法中的空对象。AFAIK,我不明白这个?请解释。扩展方法是C#语言的语法糖,它们被编译为ILCode中的常规静态方法调用。静态方法在编译时对参数一无所知。简单地说,为什么不呢?如果您在扩展中调用的第一个方法也抛出正确的错误,有时您可以跳过测试。您基本上是在要求代码有所不同,以便:禁止合理使用空对象。使用don'tneedanullcheck(因为它隐含在其他东西中)会让你承担你想要自动进??行的不必要检查的开销。这似乎有很多其他用途只是为了保存行:if(arg==null)thrownewArgumentNullException();扩展方法只是语法糖。实际上它们是另一个类的静态方法,所以既然你可以写IEnumerablefoo=null;Enumerable.Count(foo);你也可以写IEnumerablefoo=null;foo.Count();有时,允许对空对象调用扩展方法,这通过允许您将空检查移至方法而不是调用站点来简化您的代码。例如,您可能有一个返回List的扩展方法,但如果在null对象上调用则返回空List。扩展方法被转换为静态方法调用,所以代码仍然需要检查空参数,因为没有扩展方法语法糖,就无法避免正常调用静态方法。在NullArgumentException类之后添加诸如检查之类的内容可能会花费执行时间,并且用户可能想要断言或使用其他内容。这会使替换比解释或自动化更复杂,因为简单地用相应的静态方法调用替换扩展方法会改变代码的行为。在合法的情况下,您希望允许null参数(对于从对象模型到另一种类型的null对象到第二种类型的null对象的另一种转换)扩展方法只是静态方法:Listx=null;x.Count()等同于:Listx=null;System.Linq.EnumerableExtensions.Count(x);//EnumerableExtensions可能不是类,但你明白了所以你可以使用strings=null;if(s.IsNullOrEmpty())//没有空引用错误!...而不是上面的是C#学习教程:为什么Extensionmethodthatallowsnullobjects?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——strings=null;if(string.IsNullOrEmpty(s))....本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: