什么是System.Reflection.TargetException:非静态方法需要一个目标。是什么意思?

问题描述 投票:0回答:2

在我的应用程序中,我从某处收到 functionCode 值,需要反映适当的类。我试图根据 this 解决方案反映适当的类型。但它对我不起作用。我无法使用 GetField() 方法,因为我正在处理 PCL 项目。因此我尝试了这些代码行:

AssemblyName name = new AssemblyName("MyLibrary");
var type = Assembly.Load(name);
type.DefinedTypes.FirstOrDefault(x =>
x.GetDeclaredProperty("functionCode") != null &&
 (byte)x.GetDeclaredProperty("functionCode").GetValue(null) == val);

也不行。它抛出 System.Reflection.TargetException: Non-static method requires a target.

c# system.reflection
2个回答
12
投票

这意味着非静态方法需要一个对象。如果您有一个实例成员,那么您必须使用一个实例来获取它的值。因为没有实例它不存在。所以你需要将类型的实例而不是

null
传递给
GetValue
方法。或者如果你不希望它成为实例成员,则使成员
static
.


0
投票

这个错误的另一个原因是,当你从实例对象中读取一个值时,你读取的实例对象是

null
.

© www.soinside.com 2019 - 2024. All rights reserved.