cómo convertir una HashTable a Dictionary en C#? ¿Es posible? por ejemplo, si tengo una colección de objetos en HashTable y si quiero convertirlo a un diccionario de objetos con un tipo específico, ¿cómo hacerlo?convertir HashTable a Dictionary en C#
Respuesta
public static Dictionary<K,V> HashtableToDictionary<K,V> (Hashtable table)
{
return table
.Cast<DictionaryEntry>()
.ToDictionary (kvp => (K)kvp.Key, kvp => (V)kvp.Value);
}
gracias por la respuesta completa de convertir al diccionario y también el lanzamiento de la clave y el valor para el tipo dado. – RKP
var table = new Hashtable();
table.Add(1, "a");
table.Add(2, "b");
table.Add(3, "c");
var dict = table.Cast<DictionaryEntry>().ToDictionary(d => d.Key, d => d.Value);
gracias por la solución que no requiere bucle, que es lo que estaba buscando. sin embargo, acepté la otra solución como respuesta porque también hace el casting para corregir el tipo y tiene un método de extensión definido para él. el anterior devuelve el tipo de objeto genérico tanto para la clave como para el valor, lo que no ofrece ninguna ventaja adicional sobre la tabla hash. – RKP
También puede crear un método de extensión para esa versión método
Dictionary<KeyType, ItemType> d = new Dictionary<KeyType, ItemType>();
foreach (var key in hashtable.Keys)
{
d.Add((KeyType)key, (ItemType)hashtable[key]);
}
Hashtable openWith = new Hashtable();
Dictionary<string, string> dictionary = new Dictionary<string, string>();
// Add some elements to the hash table. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
foreach (string key in openWith.Keys)
{
dictionary.Add(key, openWith[key].ToString());
}
extensión de la respuesta del agente j:
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public static class Extensions {
public static Dictionary<K,V> ToDictionary<K,V> (this Hashtable table)
{
return table
.Cast<DictionaryEntry>()
.ToDictionary (kvp => (K)kvp.Key, kvp => (V)kvp.Value);
}
}
- 1. Dictionary/HashTable Object in C++?
- 2. Hashtable vs Dictionary
- 3. Hashtable to Dictionary <> syncroot.
- 4. Cómo convertir Diccionario <> a Hashtable en C#?
- 5. Cómo convertir Dictionary <string, object> a Dictionary <string, string> en C#
- 6. Hashtable con clave multidimensional en C#
- 7. Cuál es la diferencia principal entre Dictionary y Hashtable
- 8. Hashtable en C++?
- 9. ¿Cuáles son las diferencias b/w Hashtable, Dictionary y KeyValuePair?
- 10. ¿Cuál es la diferencia entre Hashtable y Dictionary?
- 11. ¿Por qué Dictionary [index] arroja KeyNotFoundException pero Hashtable [index] no?
- 12. Hashtable similar a V8 para C#?
- 13. PSCustomObject a Hashtable
- 14. cómo serializar hashtable en C#
- 15. Tecla siguiente en C# Dictionary
- 16. Cómo convertir objetos a Dictionary <TKey, TValue> en C#?
- 17. C# Dictionary Memory Management
- 18. C# Dictionary of arrays
- 19. C# Shallow copy Dictionary?
- 20. C# Array or Dictionary?
- 21. C# Dictionary to .csv
- 22. C# Dictionary Performance
- 23. C# Dictionary usando TValue dentro de otro Dictionary
- 24. Cuándo utilizar un HashTable
- 25. ¿Qué es un ejemplo de implementación de Hashtable en C#?
- 26. Implementación de Hashtable para C
- 27. Diferencia entre diccionario y Hashtable
- 28. ¿Qué tipo de resolución de colisión se elige para la implementación de HashTable/Dictionary en .net?
- 29. Cómo convertir clases en Dictionary <string, string>?
- 30. Hashtable para cadena XML y de nuevo a HashTable sin utilizar .NET Serializador
¿Conoce el tipo de los elementos 'Dictionary' en tiempo de compilación o tiempo de ejecución? –
¿Se pueden convertir todos los objetos (claves y valores) del HashTable a un tipo de objetivo específico que se utilizará como parámetro genérico para el Diccionario? ¿O preferiría excluir aquellos en el HashTable que no son del tipo apropiado? – daveaglick
Si es posible, debe poner el objeto en un 'Diccionario' para comenzar. La clase 'HashTable' es prácticamente obsoleta desde que se introdujo' Dictionary'. Como 'Diccionario' es el reemplazo genérico de' HashTable', su código necesitaría ajustes menores para usar un 'Diccionario' en su lugar. – Guffa