帮助设计一个方法,我应该使用out还是ref或返回类型?

时间:2010-04-08 15:56:57

标签: c# asp.net

我有一个方法,我将在以下背景中使用:

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;
}

3 个答案:

答案 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。