以强类型属性名作为参数的方法
本文关键字:参数 方法 强类型 属性 | 更新日期: 2023-09-27 18:04:02
我想重构这两个方法,唯一的区别是更新currentUser对象上的属性(和参数名称,但这并不重要)。
public User SaveBaselineModelTemplateId(int baselineModelTemplateId)
{
using (var db = _contextFactory.GetContext())
{
var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
HERE -> currentUser.BaselineModelTemplateID = baselineModelTemplateId;
db.SaveChanges();
return currentUser;
}
}
public User SaveComparisonModelTemplateId(int comparisonModelTemplateId)
{
using (var db = _contextFactory.GetContext())
{
var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
HERE -> currentUser.ComparisonModelTemplateID = comparisonModelTemplateId;
db.SaveChanges();
return currentUser;
}
}
我想要一个方法,我可以调用像SaveInt(ComparisonModelTemplateID, 42)
或SaveInt(x => x.ComparisonModelTemplateID, 42)
。似乎有一种方法可以使用表达式树来做到这一点,但我找不到我想要做的任何确切的例子,谢谢。
您不需要一个表达式树-一个简单的Action<User>
就足够了:
private User ModifyAndSave(Action<User> modify) {
using (var db = _contextFactory.GetContext())
{
var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
modify(currentUser);
db.SaveChanges();
return currentUser;
}
}
public User SaveBaselineModelTemplateId(int baselineModelTemplateId)
{
return ModifyAndSave(u => u.BaselineModelTemplateID = baselineModelTemplateId);
}
public User SaveComparisonModelTemplateId(int comparisonModelTemplateId)
{
return ModifyAndSave(u => u.ComparisonModelTemplateID = comparisonModelTemplateId);
}
上述两个public
方法对上述共同的ModifyAndSave
方法传递不同的作用。通用方法接受一个Action<User>
,它告诉它在保存修改之前如何处理从数据库检索到的User
对象。