参考值参数VS返回值哪一个好?

时间:2010-03-23 18:12:54

标签: c#

当我们想要修改一个对象中的某个值时,我们可能会使用两种不同的方法,只是想知道哪一个更好或者它们之间没有大的差别。

    1。
      
    
    void SomeMethod()
       {
          UserInfo newUser = New UserInfo();
          ModifyUserInfo(newUser);
          //Modify UserInfo after calling void method GetUserInfo
       }
    
    
    
    
               void ModifyUserInfo(UseerInfo userInfo)
               {
                   userInfo.UserName = "User Name";
                   .....
               }
    
      2。
        
          void SomeMethod()
             {
                UserInfo newUser = New UserInfo();
                //Assign new userinfo explicitly
                newUser = GetUserInfo(newUser);
      
             }
      
      
             UserInfo ModifyUserInfo(UseerInfo userInfo)
             {
                 userInfo.UserName = "User Name";
                 .....
                 return userInfo;
             }
      

6 个答案:

答案 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的相同实例。

相关问题