将Model及其对象作为参数传递

时间:2015-09-27 16:09:11

标签: c# asp.net-mvc

我正在开发一个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)

编译器会出现无效参数的错误。

1 个答案:

答案 0 :(得分:2)

我已经通过将公共接口命名为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&lt;&gt; 方法。所以,这是编译器理解的无效参数。

当我使用通用模型调用查询时,它可以正常工作。

干杯!