2013-03-10 2 views
1

Я читал, что словарь и KeyValuePair не могут быть записаны с помощью сериализатора xml. Итак, я написал свою собственную структуру KeyValuePair.Словарь в пользовательский список KeyValuePair - невозможно преобразовать (C# .Net 4.0)

public struct CustomKeyValuePair<Tkey, tValue> 
{ 
    public Tkey Key { get; set; } 
    public tValue Value { get; set; } 

    public CustomKeyValuePair(Tkey key,tValue value) : this() 
    { 
     this.Key = key; 
     this.Value = value; 
    } 
} 

Но когда я делаю это, я получаю сообщение об ошибке, что он не может конвертировать:

List<CustomKeyValuePair<string, AnimationPath>> convList = 
        Templates.ToList<CustomKeyValuePair<string, AnimationPath>>(); 

Она работает на обычном KeyValuePair, но не в моем обычае один. Так в чем проблема? Я попытался скопировать оригинал как можно ближе, но он не хочет конвертировать мой словарь (Шаблоны) в этот список. Я не вижу, что он использует любой интерфейс или наследует от структуры, чтобы сделать это. Нужно ли добавлять все записи вручную?

+0

, что это ошибка, которую вы получаете? – bas

+3

Каково определение шаблона? –

ответ

6

Dictionary<Tkey, TValue> реализует как IEnumerable<KeyValuePair<Tkey, Tvalue>> и ICollection<KeyValuePair<Tkey, Tvalue>>:

(из метаданных, показанного в Visual Studio):

public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, 
    ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
    IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback 

Вот почему ToList() с KeyValuePair работает, а другой нет.

Лучше всего, вероятно, использовать:

List<CustomKeyValuePair<string, AnimationPath>> convList = 
    Templates.Select(kv => new CustomKeyValuePair(kv.Key, kv.Value)).ToList(); 
+0

Спасибо, что работает :) Не знал, что словарь наследует от него. –

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