[英]Should I use the ref or out keyword here?
我有一个可能为null的对象,我将传递给一个将设置其属性的方法。
所以我的代码看起来像:
User user = null; // may or may not be null at this point.
SetUserProperties(user);
UpdateUser(user);
public void SetUserProperties(User user)
{
if(user == null)
user = new User();
user.Firstname = "blah";
....
}
所以我正在更新传递给SetUserProperties的同一个对象。
我应该在我的方法SetUserProperties中使用'ref'关键字吗?
我认为'ref'符合你在这里想要做的更好的语义。
但是,如果可能的话,我会尽量避免使用'out'和'ref'关键字。
这适合您的需求吗? 它没有使用它,并且它在做什么,IMO更清楚一点。
user = user ?? new User();
SetUserProperties(user);
UpdateUser(user);
了解对象和变量之间的区别非常重要:
ref
或out
ref
而不是out
。 如果将其更改为out
参数, if
语句将无法编译,因为在方法的开头不会明确分配user
。 我个人不确定这是一个不错的设计。 你确定创建新对象的方法有意义吗? 你不能在通话现场这样做吗? 感觉有点尴尬。
使用ref
另一种替代方法(但仍可能在方法中创建新用户)将返回适当的引用:
user = SetUserProperties(user);
...
public User SetUserProperties(User user)
{
if(user == null)
{
user = new User();
}
user.Firstname = "blah";
....
return user;
}
您可以使用ref,因为您有可能将变量指向内存中的新对象。 如果您用完了,则需要更改用户。
ref
=您希望函数具有对象的句柄,并可能 “将其重定向到内存中的另一个位置”(即将其设置为该对象类型的不同实例)
out
=您需要该方法“将其重定向到内存中的另一个位置”
是的,你应该使用ref
。 out
关键字用于未初始化的变量,这不是这里的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.