如何使用谓词重构此方法片段?
SetUpdateUserValue(User updateUser, User user)
{
if (user.FirstName != null)
updateUser.FirstName = user.FirstName;
if (user.LastName != null)
updateUser.LastName = user.LastName;
}
答案 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供您参考。