C# 检查值是否已经存在

C# 检查值是否已经存在,c#,dictionary,contains,C#,Dictionary,Contains,我有一本放书的字典: Dictionary<string, book> books 我在字典里加了一些书 如何检查字典中是否有与用户提供的标题匹配的书籍?如果没有使用书籍标题作为键,则必须枚举这些值,并查看是否有书籍包含该标题 books.ContainsKey("book name"); foreach(KeyValuePair<string, book> b in books) // or foreach(book b in books.Values) {

我有一本放书的字典:

Dictionary<string, book> books
我在字典里加了一些书


如何检查字典中是否有与用户提供的标题匹配的书籍?

如果没有使用书籍标题作为键,则必须枚举这些值,并查看是否有书籍包含该标题

books.ContainsKey("book name");
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
}
另一方面,如果您使用图书标题作为关键,那么您可以简单地执行以下操作:

books.ContainsKey("some title");

在你的字典里,这把钥匙有书名吗?如果是,请使用
ContainsKey
作为其他答案。如果该键完全是其他键,并且您希望检查值(Book对象的)
title
属性,则必须手动执行此操作,如下所示:

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

return String.Empty; //not found
foreach(书本中的KeyValuePair kvp){
如果(kvp.Value.title==“某些标题”)
返回kvp.Key;
}
返回字符串。空//找不到

如果允许您使用LINQ,请尝试使用以下代码:

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

您为“”的“string”部分提供了什么值?他想知道它是否包含一本书(dictionnary的值),我认为它具有已知的title属性,而不是dictionnary键。谢谢您,您的第一个代码对LINQ有所帮助,我以前从未尝试过。较新版本的.net framework中目前有.ContainsValue。看@
foreach(KeyValuePair<string,book> kvp in books) {
    if (kvp.Value.title == "some title")
        return kvp.Key;
}

return String.Empty; //not found
bool exists = books.Any(b => (b.Value != null && b.Value.title == "current title"));