为什么允许null对象的扩展方法?

Sri*_*thy 16 c# extension-methods

允许在null对象上调用扩展方法有什么意义?这让我不必要地检查扩展方法中的null对象.AFAIK,我无法理解这一点?请解释.

Fem*_*ref 31

扩展方法是C#语言的语法糖,它们被编译为ILCode中的常规静态方法调用.静态方法在编译时对参数一无所知.


Jon*_*nna 16

简单地说,为什么不呢?

如果您在扩展中调用的第一个方法也会抛出正确的错误,您有时可以跳过测试.

你基本上要求代码不同,以便:

  1. 对空对象使用合理的使用将被禁止.
  2. 使用不需要空检查(因为它隐含在其他东西中)会得到您想要自动发生的不必要检查的开销.

这似乎很多其他用途只是为了保存以下一行:

if(arg == null)throw new ArgumentNullException();
Run Code Online (Sandbox Code Playgroud)

  • @Femaref,我通常也这样做,但没有看到任何明确的事情.最近我倾向于NullReference,因为在调试dev时,更有可能使用方法式调用来查看C#,而不是使用IL或静态方式使用该方法.想知道MS编码指南中是否有任何正式内容. (2认同)

Jon*_*Jon 8

扩展方法只是语法糖.实际上它们是另一个类的静态方法,所以既然你可以写

IEnumerable<int> foo = null;
Enumerable.Count(foo);
Run Code Online (Sandbox Code Playgroud)

你也可以写

IEnumerable<int> foo = null;
foo.Count();
Run Code Online (Sandbox Code Playgroud)