传递模型和它的对象作为参数
本文关键字:对象 参数 模型 | 更新日期: 2023-09-27 18:14:48
我正在开发一个MVC 5应用程序。我有一个方法如下:
public static IEnumerable<KeyValuePair<string, object>> ModifiedValues<T>(this T obj, T modifiedObject)
{
foreach (var property in typeof(T).GetProperties().Where(p => !p.GetGetMethod().IsVirtual))
{
if (property.GetValue(obj) != null && property.GetValue(modifiedObject) != null)
{
if (!(property.GetValue(obj).ToString() == property.GetValue(modifiedObject).ToString()))
{
yield return new KeyValuePair<string, object>(property.Name, property.GetValue(modifiedObject));
}
}
}
}
当我将模型名和对象作为
传递给它时....ModifiedValues<ABC>(a) // ABC is model and a is an object of ABC
效果很好。
现在我想做一个通用的方法,可以接受模型和它的对象作为参数,并在该方法中,我需要将它们传递给上面的方法。我试着这样做:
public void Logto<T>(T modifyObject, IEnumerable<dynamic> query, decimal Id)
{
var original = db.ABC.AsNoTracking().FirstOrDefault(e => e.N100 == Id);
var modified = original.ModifiedValues<T>(modifyObject).ToList();
// some code here
}
在.ModifiedValues<T>(modifyObject)
编译器给出错误Invalid Arguments
我通过创建一个名为IEntity的公共接口解决了这个问题,然后如下所示:
public void Logto<T>(T modifyObject, IEnumerable<dynamic> query, decimal Id) where T : class, IEntity
{
var original = db.Set<T>().AsNoTracking().FirstOrDefault(e => e.N100 == Id);
var modified = original.ModifiedValues<T>(modifyObject).ToList();
// some code here
}
然后它工作得很好。问题是var original正在对指定的模型进行查询,即ABC,但它正在调用具有泛型类型的ModifiedValues<>方法。所以,这是编译器无法理解的无效参数。
当我用泛型模型调用查询时,它工作了。
干杯!