使用if语句重构方法

时间:2014-03-06 14:12:25

标签: c# refactoring

如何使用谓词重构此方法片段?

SetUpdateUserValue(User updateUser, User user)
{
    if (user.FirstName != null)
        updateUser.FirstName = user.FirstName;
    if (user.LastName != null)
       updateUser.LastName = user.LastName;
}

3 个答案:

答案 0 :(得分:2)

来自您的评论:I don't like many if statements.

如果您想减少可以使用null coalescing运算符

的语句数量

解决方案1:使用null coalescing运算符

SetUpdateUserValue(User updateUser, User user)
{
    updateUser.FirstName = user.FirstName ?? updateUser.FirstName;
    updateUser.LastName = user.LastName ?? updateUser.LastName;        
}

解决方案2:使用conditional (ternary)运算符

SetUpdateUserValue(User updateUser, User user)
{
 updateUser.FirstName = user.FirstName!=null?user.FirstName:updateUser.FirstName;
 updateUser.LastName = user.LastName!=null?user.LastName:updateUser.LastName;
}

答案 1 :(得分:0)

原样,功能很好。

如果你有这些的长列表,你可以考虑

static void SetIfNotNull(ref string target, string source)
{
   if (source != null)
      target = source;
}



SetUpdateUserValue(User updateUser, User user)
{
    SetIfNotNull(ref updateUser.FirstName, user.FirstName != null);
    SetIfNotNull(ref updateUser.LastName,  user.LastName != null);
    ...
}

这对于长列表来说会好一些,但仍然容易出现复制和粘贴错误。

或者,如果您愿意接受性能影响,可以使用反射来迭代成员(或已知成员列表)。

答案 2 :(得分:0)

您可以使用反射将属性从源对象复制到目标对象。 here供您参考。