该方法是使用空值调用还是给出空引用异常?
MyObject myObject = null;
myObject.MyExtensionMethod(); // <-- is this a null reference exception?
如果是这样的话,我将永远不需要检查我的“this”参数为空?
该方法是使用空值调用还是给出空引用异常?
MyObject myObject = null;
myObject.MyExtensionMethod(); // <-- is this a null reference exception?
如果是这样的话,我将永远不需要检查我的“this”参数为空?
当前回答
extensionmethod是静态的,所以如果你不给这个MyObject添加任何东西,这应该不是问题,一个快速的测试应该可以验证它:)
其他回答
一个空值将被传递给扩展方法。
如果该方法试图访问该对象而不检查它是否为空,则是,它将抛出异常。
一个家伙在这里写了“IsNull”和“IsNotNull”扩展方法,检查引用是否传递为空。就我个人而言,我认为这是一种偏差,不应该被看到,但这是完全有效的c#。
除了Marc Gravell的正确答案。
如果this参数明显为null,你可能会从编译器得到警告:
default(string).MyExtension();
在运行时运行良好,但产生警告“Expression将始终导致System. exe”。NullReferenceException,因为string的默认值是null"。
myObject.MyExtensionMethod ();当myObject为空时,将永远不会抛出空引用异常…但是,如果MyExtensionMethod()没有正确地处理null,它将抛出异常。
https://dotnetfiddle.net/KqwLya
extensionmethod是静态的,所以如果你不给这个MyObject添加任何东西,这应该不是问题,一个快速的测试应该可以验证它:)
当你想让你的文章具有可读性和垂直性时,很少有黄金法则。
值得一提的是,Eiffel说封装到方法中的特定代码应该针对某些输入工作,如果满足某些先决条件并确保预期输出,那么代码是可行的
在你的情况下 -设计合同被打破了…您将在一个空实例上执行一些逻辑。