首页 新闻 搜索 专区 学院

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

0
悬赏园豆:5 [已解决问题] 解决于 2019-01-03 17:02

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。请问大神们这是为什么?

C#
辉笑的主页 辉笑 | 初学一级 | 园豆:110
提问于:2019-01-03 14:27
< >
分享
最佳答案
0

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

收获园豆:5
fangq | 菜鸟二级 |园豆:417 | 2019-01-03 15:51
其他回答(2)
0

User user =null;
user.ToHelloWorld ();

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

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

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

BURNINGLXT | 园豆:212 (菜鸟二级) | 2019-01-03 14:59
0

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

海之殇 | 园豆:478 (菜鸟二级) | 2019-01-04 13:54

原来如此,谢谢

支持(0) 反对(0) 辉笑 | 园豆:110 (初学一级) | 2019-01-04 13:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册