在反射中获取错误时引发异常
本文关键字:异常 取错误 反射 获取 | 更新日期: 2023-09-27 17:57:39
我有库和控制台程序。程序动态加载库并获取int数组。但程序抛出异常。你能帮我修一下吗?我的图书馆:
public class Class1
{
public int [] arrayInt;
public Class1()
{
arrayInt = new int[5] {1,2,3,4,5};
}
}
我的程序:
Assembly asm = Assembly.LoadFile(@"C:'TestLibrary.dll");
Type Class1 = asm.GetType("TestLibrary.Class1") as Type;
var testClass = Activator.CreateInstance(Class1);
MemberInfo[] List = Class1.GetMember("arrayInt");
foreach (FieldInfo field in List)
{
if (field.FieldType.IsArray)
{
int[] array = (int[])field.GetValue(null);//throw exception here
Console.WriteLine("Count of list. "+array.length);
foreach (var element in array)
Console.WriteLine(element.ToString());
break;
}
}
异常消息:
System.Reflection.TargetException:非静态字段需要一个目标。在System.Reflection.RtFieldInfo.CheckConsistency(对象目标)在System.Refraction.RtFieldInfo.InteralGetValue(对象obj,StackCrawlMark&stackMark)在System.Reflection.RtfielInfo.GetValue(对象对象obj)在Tets.Program.Main(String[]args)
附言:你能修改代码吗,第一个数组不取自循环?
在循环中的字段变量中,您有字段的定义,当您想要获得字段的值时,您应该将对象传递给GetValue
方法,因此在您的代码中,您需要编写这样的
int[] array = (int[])field.GetValue(testClass);
由于此Field实例字段(无静态),您需要将实例传递给GetValue()方法。
int[] array = (int[])field.GetValue(testClass);