当我们想要修改一个对象中的某个值时,我们可能会使用两种不同的方法,只是想知道哪一个更好或者它们之间没有大的差别。
void SomeMethod()
{
UserInfo newUser = New UserInfo();
ModifyUserInfo(newUser);
//Modify UserInfo after calling void method GetUserInfo
}
void ModifyUserInfo(UseerInfo userInfo)
{
userInfo.UserName = "User Name";
.....
}
void SomeMethod()
{
UserInfo newUser = New UserInfo();
//Assign new userinfo explicitly
newUser = GetUserInfo(newUser);
}
UserInfo ModifyUserInfo(UseerInfo userInfo)
{
userInfo.UserName = "User Name";
.....
return userInfo;
}
答案 0 :(得分:5)
我更喜欢第三种:
void SomeMethod()
{
UserInfo newUser = GetUserInfo();
}
UserInfo GetUserInfo()
{
UserInfo userInfo = New UserInfo();
userInfo.UserName = "User Name";
.....
return userInfo;
}
基本上这可以让GetUserInfo
处理构建UserInfo
的所有细节,而您的调用代码不必担心除了对象之外的任何细节它又回来了。
答案 1 :(得分:3)
从第二个签名 - UserInfo ModifyUserInfo(UseerInfo userInfo)
- ,我可能会认为它会将UserInfo
视为不可变。
我可能会误以为它会复制传入的对象,而会返回一个新的,经过修改的。
答案 2 :(得分:0)
第一种方法还可以。这不是引用参数,通过引用传递的是:ref UserInfo userInfo,不推荐使用。 FxCop规则之一是:不要通过引用传递类型,但这不是你做的。
答案 3 :(得分:0)
轻率回答:他们都都不错。这是:
UserInfo newUser = New UserInfo();
newUser.Modify();
或者,如果UserInfo更好地建模为值对象:
UserInfo newUser = New UserInfo();
var u = newUser.Modify();
虽然在后一种情况下,我可能会将该方法命名为别的。
答案 4 :(得分:0)
你甚至可以拥有
UserInfo ui = new UserInfo {UserName = "User Name", ...}
(在C#3.0中)。但一般来说,如果这是一个引用类型,不要每次都实例化它,除非它真的需要(比如System.String) - 我说的是第二个例子。
答案 5 :(得分:0)
第一种方法。第二个没有任何意义;没有检查代码(或文档),就无法知道它返回传入的UserInfo的相同实例。