我试图用如下反射填写PDF表单:使用反射来填写PDF形式 - iTextSharp的
// 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循环后应用它们。 – mkl
@mkl谢谢你的意思是浅拷贝? – Zaki
集合的浅表副本创建一个新集合,其中包含与原始对象相同的对象。相反,深层复制会创建一个包含原始对象所包含对象(深层)副本的新集合。 – mkl