我正在尝试使用反射填写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.
我应该创建另一个字段集合,还是可以避免这种情况?
您正在修改foreach
循环中的formFieldMap
,该循环是迭代的基础。这就是它第二次停止迭代的原因。因此,您必须维护一个单独的变量来收集循环中的这些值,并在完成循环后将其附加到formFieldMap
。
您正在枚举中引用要枚举的列表。
您不需要获取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();
}
上面做同样的事情,它只是不直接修改你枚举的内容。