PaSifaLL 2021-07-09 23:32 采纳率: 0%
浏览 9

使用PropertyInfo与循环总是提前结束执行,每次都跳过,求解为什么?

这段代码第一句声明对象,
第二句使用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);
            }
  • 写回答

1条回答 默认 最新

  • 浪客 2021-07-09 23:54
    关注

    if (string.IsNullOrEmpty(wenben))
    {
    break;
    }
    这个break会跳出循环,设断点跟踪一下

    评论

报告相同问题?

问题事件

  • 修改了问题 7月10日
  • 创建了问题 7月9日

悬赏问题

  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题