for(int i=0; i < ArrayBook.Length; i++)
{
   ArrayBook[i] = new Book();
   ArrayBook[i].Price = i;
}
....if(typeArray.IsArray)
{
    Array a = (Array)myFieldInfo.GetValue( myBook);
    for (int i=0; i < a.Length; i++)
    {
       Book b = (Book)a.GetValue(i);
       Console.WriteLine(b.Price);
    }
}

解决方案 »

  1.   

    你得到的是Array的Type,而不是实例.
    如果你有实例,那么可以转换到Array后再操作.如果你要得到Array的元素类型,那么参考
    Type.GetElementType
      

  2.   

    foreach(FieldInfo  myFieldInfo  in  myFieldInfos)  
    {              
               Type  typeArray=myFieldInfo.FieldType;  
               //判断该公共成员是否是数组  
               if(typeArray.IsArray)  
               {  
                      Array arrayC=(Array)myFieldInfo.GetValue(myBook);
             for(int i=0;i<arraySourceClass.Length;i++)
    {      if(arraySourceClass.GetValue(i)==null)
                          //判断数组元素初始化了没有,如果没有初始化,下面就给它初始化
         {
                                请问这了怎么给数组元素初始化?????
                               //不可以用arraySourceClass.GetValue(i)=new Book();
                               //因为是用反射。
                            }
                        }
               }  
    }
      

  3.   

    to saucer:谢谢你的答复,四个问题中的两个给了我很大帮助。不过最后一个问题我没描述好,我的意思是在那段foreach代码中不可以出现“Book()”,因为这些信息都是通过反射获取的,也就是假设你只知道一个实例myBook(Books类型),通过反射获取到myBook的成员,但由于它其中一个成员(ArrayBook)是数组类型(Book[]),而且数组元素还没实例化,我怎么才可以通过反射获取的信息将该数组元素实例化呢?所以代码中不可以出现new Book()字样,因为动态获取myBook的成员之前,还不知道它的成员是什么类型的。
      

  4.   

    你是说这样吧?
    a.SetValue(Activator.CreateInstance(typeArray.GetElementType()),i);