with values net initialized initialize c# .net dictionary

values - initialize dictionary c#



C#dictionaries ValueOrNull/ValueorDefault (4)

Puedes usar un método de ayuda:

public abstract class MyHelper { public static V GetValueOrDefault<K,V>( Dictionary<K,V> dic, K key ) { V ret; bool found = dic.TryGetValue( key, out ret ); if ( found ) { return ret; } return default(V); } } var x = MyHelper.GetValueOrDefault( dic, key );

Actualmente estoy usando

var x = dict.ContainsKey(key) ? dict[key] : defaultValue

Me gustaría tener alguna forma de que el diccionario [clave] devuelva nulo para las teclas inexistentes, así podría escribir algo así como

var x = dict[key] ?? defaultValue;

esto también termina siendo parte de las consultas de linq, etc. por lo que preferiría soluciones de una sola línea.


¿No es simplemente TryGetValue(key, out value) lo que estás buscando? Citando MSDN:

When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized.

desde http://msdn.microsoft.com/en-us/library/bb347013(v=vs.90).aspx


Aquí está la solución "definitiva", ya que se implementa como un método de extensión, utiliza la interfaz IDictionary, proporciona un valor predeterminado opcional y está escrito de forma concisa.

public static TV GetValueOrDefault<TK, TV>(this IDictionary<TK, TV> dic, TK key, TV defaultVal=default(TV)) { TV val; return dic.TryGetValue(key, out val) ? val : defaultVal; }


Con un método de extensión:

public static class MyHelper { public static V GetValueOrDefault<K, V>(this IDictionary<K, V> dic, K key, V defaultVal = default(V)) { V ret; bool found = dic.TryGetValue(key, out ret); if (found) { return ret; } return defaultVal; } void Example() { var dict = new Dictionary<int, string>(); dict.GetValueOrDefault(42, "default"); } }