传递模型和它的对象作为参数

本文关键字:对象 参数 模型 | 更新日期: 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<>方法。所以,这是编译器无法理解的无效参数。

当我用泛型模型调用查询时,它工作了。

干杯!