sirve recorrer que para example array c# key-value

recorrer - para que sirve dictionary c#



El valor predeterminado para KeyValuePair (7)

A partir de C # 7.1, puede usar el literal default con inferencia de tipo para simplificar la expresión:

var getResult= keyValueList.SingleOrDefault(); if(getResult.Equals(default)) { } else { }

Tengo un objeto del tipo IEnumerable<KeyValuePair<T,U>> keyValueList , estoy usando

var getResult= keyValueList.SingleOrDefault(); if(getResult==/*default */) { } else { }

¿Cómo puedo verificar si getResult es el valor predeterminado, en caso de que no pueda encontrar el elemento correcto?

No puedo comprobar si es null o no, porque KeyValuePair es una estructura.


Desde su código original, parece que lo que desea es verificar si la lista estaba vacía:

var getResult= keyValueList.SingleOrDefault(); if (keyValueList.Count == 0) { /* default */ } else { }


Prueba esto:

KeyValuePair<string,int> current = this.recent.SingleOrDefault(r => r.Key.Equals(dialog.FileName) == true); if (current.Key == null) this.recent.Add(new KeyValuePair<string,int>(dialog.FileName,0));


Prueba esto:

if (getResult.Equals(new KeyValuePair<T,U>()))

o esto:

if (getResult.Equals(default(KeyValuePair<T,U>)))


Puede crear un método de extensión general (y genérico), como este:

public static class Extensions { public static bool IsDefault<T>(this T value) where T : struct { bool isDefault = value.Equals(default(T)); return isDefault; } }

Uso:

// We have to set explicit default value ''0'' to avoid build error: // Use of unassigned local variable ''intValue'' int intValue = 0; long longValue = 12; KeyValuePair<String, int> kvp1 = new KeyValuePair<String, int>("string", 11); KeyValuePair<String, int> kvp2 = new KeyValuePair<String, int>(); List<KeyValuePair<String, int>> kvps = new List<KeyValuePair<String, int>> { kvp1, kvp2 }; KeyValuePair<String, int> kvp3 = kvps.FirstOrDefault(kvp => kvp.Value == 11); KeyValuePair<String, int> kvp4 = kvps.FirstOrDefault(kvp => kvp.Value == 15); Console.WriteLine(intValue.IsDefault()); // results ''True'' Console.WriteLine(longValue.IsDefault()); // results ''False'' Console.WriteLine(kvp1.IsDefault()); // results ''False'' Console.WriteLine(kvp2.IsDefault()); // results ''True'' Console.WriteLine(kvp3.IsDefault()); // results ''False'' Console.WriteLine(kvp4.IsDefault()); // results ''True''


Recomiendo una forma más comprensiva usando el método de extensión:

public static class KeyValuePairExtensions { public static bool IsNull<T, TU>(this KeyValuePair<T, TU> pair) { return pair.Equals(new KeyValuePair<T, TU>()); } }

Y luego solo usa:

var countries = new Dictionary<string, string> { {"cz", "prague"}, {"de", "berlin"} }; var country = countries.FirstOrDefault(x => x.Key == "en"); if(country.IsNull()){ }


if(getResult.Key.Equals(default(T)) && getResult.Value.Equals(default(U)))