在反射中获取错误时引发异常

本文关键字:异常 取错误 反射 获取 | 更新日期: 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);