2016-04-08 2 views
6

У меня есть метод, который принимает хэш-таблицу и я использую CONCAT, чтобы добавить его в конец другой хеш-таблице, но я получаю эту ошибку:Добавить Hashtable в конец другого Hashtable

The type arguments for method System.Linq.Enumerable.Concat<TSource>(this System.Collections.Generic.IEnumerable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' cannot be inferred from the usage.

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

public void resetCameras(Hashtable hashTable) 
{ 
    Hashtable ht = new Hashtable(); 

    ht.Add("time", 2.0f); 
    ht.Add("easeType","easeInOutQuad"); 
    ht.Add("onupdate","UpdateSize"); 
    ht.Add("from",size); 
    ht.Add("to",5.0f); 

    if(hashTable != null) { 
     ht = ht.Concat(hashTable); 
    } 

    iTween.ValueTo(gameObject,ht); 
} 

Надеюсь, что вы можете помочь объяснить мою ошибку, все еще новость для C#.

+0

Когда вы перечисляете HashTable, вы * только * перечисляете ** клавиши **. В принципе, LINQ сообщает вам, что вам нужны * значения * для ключей, которые вы 'concat''ing. – Tersosauros

+1

Также обратите внимание, что HashTable/Dictionary не имеет понятия порядка, поэтому «добавить к концу» действительно не является допустимой операцией для этих типов. –

+0

@ Tersosauros, поэтому мне нужно использовать цикл for? В этом случае я могу не просто использовать '.Add' для каждого ключа для другого? – WDUK

ответ

6

К сожалению, нет простого способа установить merge/concat два HashTables, вы должны сделать это традиционным способом зацикливания, хотя каждая запись.

foreach (DictionaryEntry entry in hashTable) 
{ 
    if(!ht.ContainsKey(entry.Key)) 
    { 
     ht.Add(entry.Key, entry.Value); 
    } 
} 

// rest of the logic 
Смежные вопросы