¿Cómo agrego un método Get () estilo Python que toma un valor predeterminado para mis diccionarios C #?

StackOverflow https://stackoverflow.com/questions/489051

  •  20-08-2019
  •  | 
  •  

Pregunta

Me gustaría poder especificar un valor predeterminado para devolver si la clave que especifico no se puede encontrar en el diccionario.

por ejemplo

int default = 5;
string key = "MyKey";
int foo = myDictionary.GetValue(key, default);

si key está en myDictionary foo debe contener el valor del diccionario; de lo contrario, mantendrá 5.

¿Fue útil?

Solución

Encontré un fragmento de código aquí que hace bien el trabajo al agregar un método de extensión a IDictionary:

using System.Collections.Generic;

namespace MyNamespace {
    public static class DictionaryExtensions {
        public static V GetValue<K, V>(this IDictionary<K, V> dict, K key) {
            return dict.GetValue(key, default(V));
        }

        public static V GetValue<K, V>(this IDictionary<K, V> dict, K key, V defaultValue) {
            V value;
            return dict.TryGetValue(key, out value) ? value : defaultValue;
        }
    }
}

Otros consejos

La mejor manera es usar TryGetValue, una forma posible es haciendo:


    int default = 5;
    string key = "MyKey"; 
    int foo = 0;
    defaultValue = 5;
    (myDictionary.TryGetValue(key, out foo))?return foo: return defaultValue;

Si intenta obtener un valor que no está presente, TryGetValue devuelve falso, lo que significa que utiliza la segunda parte de la cláusula.

También puede decidir establecer foo en su valor predeterminado, usar TryGetValue y devolver foo en cualquier caso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top