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();

         }

これは最初のプロパティでは正常に機能しますが、2回目の反復ではCollection was modified; enumeration operation may not execute.

別のフィールドのコレクションを作成する必要がありますか、それともこれを回避できますか?

4

2 に答える 2

1

反復のベースとなるループのformFieldMap内側を変更しています。foreachこれが、2回目の反復を停止する理由です。したがって、ループ内でこれらの値を収集し、ループ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 に答える