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 に答える