猿问

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

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

一只斗牛犬
浏览 1177回答 4
4回答

MYYA

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

郎朗坤

User user =null; user.ToHelloWorld (); 一个为null的user对象。对于null对象,你是无法操作其属性的。 初始化对象的时候不建议初始化为null。 User user =null; 改为  User user = new User { UserId="XXX",UserName="XXX"};

慕工程0101907

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

月关宝盒

原来如此,谢谢
随时随地看视频慕课网APP
我要回答