c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错
2018-09-04 18:08
453 查看
如果一个对象的值为null,那么它调用扩展方法时会报错吗?
Person p = null ; p.ExtendMethod();
上述代码出现的情况不会报错,刚开始遇到这种情况时很纳闷,就去问了大牛。大牛解释如下:
扩展函数其实只是为了让代码更具有可读性, 但最终在clr中会翻译成标准的静态函数调用,
比如:
public static void ExtMethod(this string str) { if(!string.IsNullOrEmpty(str)) { //对str处理 } }
调用 "string".ExtMethod()最终会翻译成ExtMethod("string"); 所以即使为null自然也不会报错
null 为什么点不出那个扩展函数?
通过null获取它自己的方法如下:
这样试试 ((string)null).ExtMethod() 肯定能点出来
关键是使用扩展函数要看对应的数据类型。
相关文章推荐
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法
- 一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址
- 调用对象属性(或方法)保证健壮性的一个小技巧——使Object != null
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法
- C#中对象调用方法如果对象为空报异常的问题
- C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- Delphi 调用C#编写的WebService 参数为Null解决方法
- C# 实现和调用自定义扩展方法
- Delphi 调用C#编写的WebService 参数为Null解决方法
- c#中一个窗体调用另一个窗体的控件及方法(转贴)
- 为JS脚本中String对象扩展一个静态Format()方法
- C#在一个解决方案下怎么在一个窗体中调用另一个窗体中的方法
- C#反射调用另外一个类中的私有字段和方法
- C#反射 创建对象,调用方法
- iBatis为业务对象添加可分页方法,扩展方法,调用Oracle
- 3、步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- C#扩展对象的方法,this关键字
- 一个简单的C#调用QTP自动化对象模型的例子