首页 > 解决方案 > 在未知 DbSet 上调用方法“Find”会抛出:“对象与目标不匹配。”

问题描述

我想在未知的 DbSet 上运行方法“查找”。并找到名称为“字符串”的记录。我这样做:

PropertyInfo prop = db.GetType().GetProperty(myClass);
Type classObject = prop.GetValue(db).GetType();
var classObjectMethod = classObject.GetMethods().Last(x=>x.Name=="Find");
var record = classObjectMethod.Invoke(classObject, new object[] { new object[] {"string"} });

它抛出“System.Reflection.TargetException:'对象与目标类型不匹配。'”我不知道为什么。我怎样才能使这项工作?

标签: c#reflection

解决方案


您使用的方法来自classObject, 但是:classObject命名错误-实际上是对象的类型(请参阅 : .GetType())。你想要的是实例,而不是类型;所以:

PropertyInfo prop = db.GetType().GetProperty(myClass);
object classObject = prop.GetValue(db);
var classObjectMethod = classObject.GetType().GetMethods().Last(x=>x.Name=="Find");
var record = classObjectMethod.Invoke(classObject, new object[] { new object[] {"string"} });

这里重要的是我已经移动了.GetType(), 所以它classObject仍然是目标实例。


推荐阅读