verificar si el valor ya existe

Tengo un diccionario que contiene mis libros:

Dictionary<string, book> books

Definición de libro:

class book
{
    string author { get; set; }

    string title { get; set; }
} 

He añadido algunos libros al diccionario.

¿Cómo puedo comprobar si hay un libro en el Diccionario que coincida con el título proporcionado por el usuario?

preguntado el 03 de mayo de 12 a las 18:05

¿Qué valor está proporcionando para la parte 'cadena' de ' '? -

4 Respuestas

books.ContainsKey("book name");

contestado el 03 de mayo de 12 a las 18:05

Quiere saber si contiene un libro (valor del diccionario) con una propiedad de título conocida, creo, no la clave del diccionario. - Amaranto

Si no está utilizando el título del libro como clave, tendrá que enumerar los valores y ver si algún libro contiene ese título.

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
}

O puede usar LINQ:

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

Si, por otro lado, está utilizando el título del libro como clave, simplemente puede hacer:

books.ContainsKey("some title");

contestado el 03 de mayo de 12 a las 19:05

GRACIAS, su primer código ayudó, eso viene a LINQ, nunca lo había probado antes: bublik

Hay .ContainsValue actualmente en la versión más reciente de .net framework. Ver @ msdn.microsoft.com/en-us/library/a63811ah(v=vs.110).aspx - nkalfov

Si tiene permiso para usar LINQ, intente usar el siguiente código:

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

contestado el 03 de mayo de 12 a las 19:05

En su diccionario, ¿la clave contiene el título? Si es así, use ContainsKey como responde el otro. Si la clave es algo completamente diferente y desea verificar el valor (objeto del libro) title atributo, tendrías que hacerlo manualmente así:

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

return String.Empty; //not found

contestado el 03 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.