这段代码第一句声明对象,
第二句使用TYPE类
第三句使用PropertyInfo类
第四句返回0
第五句返回123
而循环体每次执行大概19次就会结束,并不是123次,其中很多属性都不会访问,自然赋值成功就很少,求解为什么。
代码看起来稍长,很多地方可以忽略,比如第二层循环体的逻辑部分很多不会被执行,其中第23行就很玄学,这个属性是包含的,但是现实不会被检测到。第14行同样,调用GETVaule访问不到自己的属性,额外添加了一个判断NULL。
而且不管怎样,第二次循环都应该被执行123次,直接写为for (int q1 = 0; q1 < 123; q1++)同样只会执行19次。
diyicidata diyicidata = new diyicidata();
Type type = diyicidata.GetType();
PropertyInfo[] properties = type.GetProperties();
Console.WriteLine(type.GetFields().Length );
Console.WriteLine(properties.Length);
for (int i = 0; i < diyicidatas.Count; i++)
{
A chukou = new A();
for (int q1 = 0; q1 < properties.Length; q1++)
{
Console.WriteLine(properties[q1].Name.Substring(0, 1).ToUpper() + properties[q1].Name.Substring(1));
if (chukou.GetType().GetProperty(properties[q1].Name.Substring(0, 1).ToUpper() + properties[q1].Name.Substring(1)) != null)
{
if (diyicidatas[i].GetType().GetProperty(properties[q1].Name).GetValue(diyicidatas[i], null)==null)
{
break;
}
string wenben = diyicidatas[i].GetType().GetProperty(properties[q1].Name).GetValue(diyicidatas[i], null).ToString();
if (string.IsNullOrEmpty(wenben))
{
break;
}
if (properties[q1].Name== "cusCiqNo")
{
chukou.Bianhao = wenben;
}
chukou.GetType().GetProperty(properties[q1].Name.Substring(0, 1).ToUpper() + properties[q1].Name.Substring(1)).SetValue(chukou, diyicidatas[i].GetType().GetProperty(properties[q1].Name).GetValue(diyicidatas[i], null));
}
}
chukouGDdatas.Add(chukou);
}