我有一个方法,我将在以下背景中使用:
1
用户user = null;
if(...)
{
user = defaultUser;
SetUser(a,b,user);
}
else
{
SetUser(a,b,user);
}
SaveUser(user);
所以有些情况下用户可能为null,而在其他情况下,它已经被初始化。
我应该如何设计SetUser方法?
我目前已经这样了,但是当用户为空时会导致错误。
public void SetUser(object a, object b, User user)
{
if(user == null)
user = new User();
user.Security = a.security;
user.Blah = b.type;
}
答案 0 :(得分:6)
都不是。回来吧:
public User SetUser(object a, object b, User user) {
if (user == null) {
user = new User();
}
user.Security = a.security;
user.Blah = b.type;
return user;
}
发送用户对象或null,并将结果分配给引用:
User user;
if(...) {
user = SetUser(a, b, defaultUser);
} else {
user = SetUser(a, b, null);
}
SaveUser(user);
请注意,每次使用它时都必须创建一个新的defaultUser
实例,因为它将成为新的用户对象。如果您尝试重用默认用户对象,您将最终覆盖以前的用户对象,并最终得到对同一对象的多个引用,而不是单独的对象。
答案 1 :(得分:2)
user
必须参考。否则,将new User()
分配给本地user
不会影响来电者的user
。
答案 2 :(得分:0)
public void SetUser(object a, object b, User user)
这无论如何都行不通,因为你修改了local(参数变量)。
规则很简单 - 如果你想要返回更多而不是一个值,请使用out / ref。