0

我读了那个字典,并且 KeyValuePair 不能由 xml 序列化程序编写。所以我编写了自己的 KeyValuePair 结构。

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,但不适用于我的自定义键值对。所以有什么问题?我试图尽可能地复制原件,但它不想将我的字典(模板)转换为该列表。我看不到它使用任何接口或从结构继承来做到这一点。我必须手动添加所有条目吗?

4

1 回答 1

5

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();
于 2013-03-10T19:17:50.977 回答