c# - 在未知 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:'对象与目标类型不匹配。'”我不知道为什么。我怎样才能使这项工作?
解决方案
您使用的方法来自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
仍然是目标实例。
推荐阅读
- python - 从 git 安装 python API
- javascript - 允许最终值通过后,有没有办法完成流?
- ios - 通过本机 facebook 应用程序的授权错误
- go - golang中的依赖注入
- surge.sh - spray.sh 不允许修改 robots.txt
- javascript - 解决 vanilla js + html 中相邻元素问题的最有效方法?
- google-maps - 如何使用 Flutter/Dart 在地图上添加标记点击/单击?
- java - 将大量特定对象存储在内存中以便稍后筛选以找到特定对象的最佳实践?
- swift - 为什么 Swift 不允许在类 init 中分配给 self,但在协议 init 中却不允许?
- javascript - 使用反应原生应用程序更改 android 主屏幕壁纸