为了账号安全,请及时绑定邮箱和手机立即绑定

静态方法中实例化的对象问题

静态方法中实例化的对象问题

C#
一只斗牛犬 2018-12-07 06:08:15
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try { User user =null; user.ToHelloWorld (); if (user == null) { Console.Write("world"); Console.Read(); } else { Console.Write(user.UserName); Console.Read(); } } catch { Console.Write("hello world"); Console.Read(); } } } public class User { public string UserId { get; set; } public string UserName { get; set; } } public static class UserExtention { public static void ToHelloWorld(this User user) { if (user == null) { user = new User() { UserName = "hello" }; } } } } 这段代码的输出结果为WORLD。调试发现在执行完 user.ToHelloWorld ();后User还是为NULL。请问大神们这是为什么?
查看完整描述

4 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

User user =null; 和 静态类下的扩展 是2个不同的对象

查看完整回答
反对 回复 2019-01-07
?
郎朗坤

TA贡献1921条经验 获得超9个赞

User user =null;
user.ToHelloWorld ();

一个为null的user对象。对于null对象,你是无法操作其属性的。

初始化对象的时候不建议初始化为null。

User user =null; 改为  User user = new User { UserId="XXX",UserName="XXX"};

查看完整回答
反对 回复 2019-01-07
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

静态类的扩展方法是一个语法糖,
user.ToHelloWorld ()其实就是UserExtention.ToHelloWorld (user);
如果了解参数的传递,你就知道方法里的User user只是一个副本。
除非用ref修饰参数,不过用this修改的参数不能用ref修饰

查看完整回答
反对 回复 2019-01-07
?
月关宝盒

TA贡献1772条经验 获得超5个赞

原来如此,谢谢

查看完整回答
反对 回复 2019-01-07
  • 4 回答
  • 0 关注
  • 1176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信