web-dev-qa-db-fra.com

vérifier si la valeur existe déjà

J'ai un dictionnaire qui contient mes livres:

Dictionary<string, book> books

Définition du livre:

class book
{
    string author { get; set; }

    string title { get; set; }
} 

J'ai ajouté des livres au dictionnaire. 

Comment puis-je vérifier si un livre dans le dictionnaire correspond au titre fourni par l'utilisateur?

15
Bublik

Si vous n'utilisez pas le titre du livre comme clé, vous devrez énumérer les valeurs et voir si un livre contient ce titre.

foreach(KeyValuePair<string, book> b in books) // or foreach(book b in books.Values)
{
    if(b.Value.title.Equals("some title", StringComparison.CurrentCultureIgnoreCase))
        return true
}

Ou vous pouvez utiliser LINQ:

books.Any(tr => tr.Value.title.Equals("some title", StringComparison.CurrentCultureIgnoreCase))

Si, par contre, vous utilisez le titre du livre comme clé, vous pouvez simplement faire:

books.ContainsKey("some title");
24
SPFiredrake
books.ContainsKey("book name");
29
Brendan

Si vous êtes autorisé à utiliser LINQ, essayez d’utiliser le code ci-dessous:

bool exists = books.Any(b => (b.Value != null && b.Value.title == "current title"));
5
Channs

Dans votre dictionnaire, la clé contient-elle le titre? Si oui, utilisez ContainsKey comme autre réponse. Si la clé est tout à fait autre chose et que vous voulez vérifier l'attribut title de la valeur (objet Book), vous devez le faire manuellement comme ceci:

foreach(KeyValuePair<string,book> kvp in books) {
    if (kvp.Value.title == "some title")
        return kvp.Key;
}

return String.Empty; //not found
2
xbonez