0

我正在尝试使用反射填写 pdf 表单,如下所示:

// Get the form fields for this PDF and fill them in!
 var formFieldMap = GetFormFieldNames(pdfTemplate);

     foreach (var fields in formFieldMap)
       {
         var fieldName = UppercaseFirst(fields.Key.Replace("pdf_", ""));

         var proPertyValue = fosques.GetType().GetProperty(fieldName).GetValue(ques, null);

          formFieldMap[fields.Key] = proPertyValue.ToString();

         }

这适用于第一个属性,但在第二次迭代时它说Collection was modified; enumeration operation may not execute.

我应该创建另一个字段集合,还是可以避免这种情况?

4

2 回答 2

1

您正在修改作为迭代基础的循环formFieldMap内部。foreach这就是它第二次停止迭代的原因。因此,您必须维护一个单独的变量来收集循环内的这些值,并formFieldMap在完成循环后将其附加到。

于 2013-01-25T10:08:59.240 回答
0

您在枚举中引用您正在枚举的列表。

您不需要获取formFieldMapy[fields.Key],因为您已经可以访问它,因此您可以简单地执行以下操作:

foreach (var fields in formFieldMap)
{
  var fieldName = UppercaseFirst(fields.Key.Replace("pdf_", ""));

  var proPertyValue = fosques.GetType().GetProperty(fieldName).GetValue(ques, null);
  fields.Value = proPertyValue.ToString();
  //formFieldMap[fields.Key] = proPertyValue.ToString();
 }

上面做同样的事情,它只是不直接修改你枚举的内容。

于 2013-01-25T10:07:21.490 回答