我有图书馆和控制台程序。该程序动态加载库并获取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(Object target)处于System.Reflection.RtFieldInfo.InternalGetValue(Object obj,StackCrawlMark& stackMark)的System.Reflection.RtFieldInfo.GetValue(Object obj)at Tets.Program.Main(String [])参数)
P.S。你可以修改第一个数组不从Loop获取的代码吗?
答案 0 :(得分:1)
在循环中的字段变量中,您有字段的定义,当您想要获取字段的值时,您应该将对象传递给GetValue
方法,因此在您的代码中,您需要编写类似这样的内容
int[] array = (int[])field.GetValue(testClass);
答案 1 :(得分:0)
由于此Field实例字段(None static),您需要将实例传递给GetValue()方法。
int[] array = (int[])field.GetValue(testClass);