2017-02-21 9 views
1

Этот метод нам теперь работать после перехода на AWS я получаю странные ошибки:Перебор Словарь элементов в iTextsharp

public static Dictionary<string, string> GetFormFieldNames(string pdfPath) 
{ 
    var fields = new Dictionary<string, string>(); 

    foreach (DictionaryEntry entry in reader.AcroFields.Fields) 
    { 
     fields.Add(entry.Key.ToString(), string.Empty); 
    } 

    return fields; 
} 

Cannont convert type System.Collections.Generic.KeyValuePair<String.iTextSharp.text.pdf.AcroFields.item> to System.CollectionsEntry

Я понимаю, ошибка очевидна, но я не могу показаться, чтобы получить тип правый. Почему этот метод перестанет работать? Что я здесь делаю неправильно?

+1

Можете ли вы использовать var (вместо DictionaryEntry), а затем использовать intellisense для получения правильного значения в словаре? – thinklarge

+1

@thinklarge Я сделал то, что вы предложили, и это сработало спасибо! Если вы ответите, я помету его, как ответ. Я не могу себе представить, сколько из этих пользователей теперь может иметь эту проблему. – MizAkita

+1

Спасибо за ответ. По этой причине мне нравится инструмент вокруг C#. Intellisense упрощает кривую обучения для новых библиотек. – thinklarge

ответ

1

Вы можете использовать var вместо определения типа, а затем получить Intellisence для вас.

public static Dictionary<string, string> GetFormFieldNames(string pdfPath) 
{ 
    var fields = new Dictionary<string, string>(); 

    foreach (var entry in reader.AcroFields.Fields) 
    { 
     fields.Add(entry.*use intellisense here*, string.Empty); 
    } 

    return fields; 
} 
0

Сообщение об ошибке не имеет смысла. KeyValuePair имеет два типа параметров, но сообщение, которое вы опубликовали, имеет только одно. Также нет типа System.CollectionsEntry или пространства имен в .NET, поэтому я подозреваю, что вы усекали свое фактическое сообщение об ошибке. В любом случае, я предполагаю, что тип полей является строкой System.Collections.Generic.KeyValuePair <, iTextSharp.text.pdf.AcroFields.Item >. Вы могли бы просто использовать foreach (var kvp в reader.AcroFields.Fields).

Что касается того, почему вещи «изменились», возможно, вы изменили версии .NET? DictionaryEntry - это предиповый способ итерации над Hashtables.

Смежные вопросы