首页 > 代码库 > 通过反射将数组中的元素给一个对象中的各个字段赋值

通过反射将数组中的元素给一个对象中的各个字段赋值

现有一个附加信息对象AttachedInfo,它里面分别有Info01、Info02.....Info10一共十个附加信息字段,现在参数传过来是一个string[]数组,要怎么才能将这个数组中的元素分别对应到这个对象中的各个字段呢,通过反射就可以实现,即使后期AttachedInfo中的Info字段增加,或者说string[]中的元素个数与AttachedInfo中的Info字段个数不一致也没关系。


                        AttachedInfo ai = new AttachedInfo();
                        //通过反射将AttachedInfo中的属性映射成一个属性数组
                        Reflection.PropertyInfo[] propList = typeof(AttachedInfo).GetProperties();
                        //遍历该数组中的属性
                        propList.ToList().ForEach(p =>
                            {
                                //将Info开头的属性全都找出来
                                if (p.Name.StartsWith("Info"))
                                {
                                    //因为属性Info的后两位都是01、02的数字,因此可以去掉前缀Info,以此来对应string[]数组中的元素索引
                                    int index = Convert.ToInt32(p.Name.TrimStart(‘I‘,‘n‘,‘f‘,‘o‘));
                                    //判断索引是否超出了string[]数组
                                    if (index <= smr.AttachedInfos.Count())
                                    {
                                        //给每个对象中的字段赋值
                                        p.SetValue(ai, smr.AttachedInfos[index - 1], null);
                                    }
                                    else
                                    {
                                        p.SetValue(ai, null, null);
                                    }
                                }
                            });