我正在开发一个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)
编译器会出现无效参数的错误。
答案 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; 方法。所以,这是编译器理解的无效参数。
当我使用通用模型调用查询时,它可以正常工作。
干杯!