Bla*_*man 4 c# pass-by-reference
我有一个可能为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";
....
}
Run Code Online (Sandbox Code Playgroud)
所以我正在更新传递给SetUserProperties的同一个对象.
我应该在我的方法SetUserProperties中使用'ref'关键字吗?
我认为'ref'符合你在这里想要做的更好的语义.
但是,如果可能的话,我会尽量避免使用'out'和'ref'关键字.
这适合您的需求吗?它没有使用它,并且它在做什么,IMO更清楚一点.
user = user ?? new User();
SetUserProperties(user);
UpdateUser(user);
Run Code Online (Sandbox Code Playgroud)
了解对象和变量之间的区别非常重要:
ref或outref而不是out.如果将其更改为out参数,则if语句将无法编译,因为user在方法的开头不会明确赋值.我个人不确定这是一个不错的设计.你确定创建新对象的方法有意义吗?你不能在通话现场这样做吗?感觉有点尴尬.
使用ref(但仍可能在方法中创建新用户)的另一种替代方法是返回适当的引用:
user = SetUserProperties(user);
...
public User SetUserProperties(User user)
{
if(user == null)
{
user = new User();
}
user.Firstname = "blah";
....
return user;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |