J'ai un objet du type IEnumerable<KeyValuePair<T,U>> keyValueList
, j'utilise
var getResult= keyValueList.SingleOrDefault();
if(getResult==/*default */)
{
}
else
{
}
Comment puis-je vérifier si getResult
est la valeur par défaut, au cas où je ne trouverais pas le bon élément?
Je ne peux pas vérifier si c'est null
ou pas, parce que KeyValuePair
est une structure.
Essaye ça:
if (getResult.Equals(new KeyValuePair<T,U>()))
ou ca:
if (getResult.Equals(default(KeyValuePair<T,U>)))
Vous pouvez créer une méthode d'extension générale (et générique), comme celle-ci:
public static class Extensions
{
public static bool IsDefault<T>(this T value) where T : struct
{
bool isDefault = value.Equals(default(T));
return isDefault;
}
}
Usage:
// 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'
Essaye ça:
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));
À partir de C # 7.1, vous pouvez utiliser le default
littéral avec inférence de type pour simplifier l'expression:
var getResult= keyValueList.SingleOrDefault();
if(getResult.Equals(default))
{
}
else
{
}
if(getResult.Key.Equals(default(T)) && getResult.Value.Equals(default(U)))
À partir de votre code d'origine, il semble que ce que vous voulez est de vérifier si la liste était vide:
var getResult= keyValueList.SingleOrDefault();
if (keyValueList.Count == 0)
{
/* default */
}
else
{
}
Je recommande de manière plus compréhensive en utilisant la méthode d'extension:
public static class KeyValuePairExtensions
{
public static bool IsNull<T, TU>(this KeyValuePair<T, TU> pair)
{
return pair.Equals(new KeyValuePair<T, TU>());
}
}
Et puis juste utiliser:
var countries = new Dictionary<string, string>
{
{"cz", "prague"},
{"de", "berlin"}
};
var country = countries.FirstOrDefault(x => x.Key == "en");
if(country.IsNull()){
}