簡體   English   中英

Dictionary ContainsKey並在一個函數中獲取值

[英]Dictionary ContainsKey and get value in one function

有沒有辦法調用Dictionary<string, int>一次來找到一個鍵的值? 現在我正在打兩個電話。

if(_dictionary.ContainsKey("key") {
 int _value = _dictionary["key"];
}

我想這樣做:

object _value = _dictionary["key"] 
//but this one is throwing exception if there is no such key

如果沒有這樣的密鑰或者通過一次調用獲取值,我會想要null嗎?

您可以使用TryGetValue

int value;
bool exists = _dictionary.TryGetValue("key", out value);

如果TryGetValue包含指定的鍵,則返回true,否則返回false。

選中的答案是正確答案。 這是為提供者user2535489提供正確的方法來實現他的想法:

public static class DictionaryExtensions 
{
    public static TValue GetValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue fallback = default(TValue))
    {
        TValue result;

        return dictionary.TryGetValue(key, out result) ? result : fallback;
    }
}

然后可以用於:

Dictionary<string, int> aDictionary;
// Imagine this is not empty
var value = aDictionary.GetValue("TheKey"); // Returns 0 if the key isn't present
var valueFallback = aDictionary.GetValue("TheKey", 10); // Returns 10 if the key isn't present

為了您的目的,這可能應該這樣做。 就像你在問題中提到的那樣,將所有內容(null或值)全部放入對象中:

object obj = _dictionary.ContainsKey("key") ? _dictionary["key"] as object : null;

要么..

int? result = _dictionary.ContainsKey("key") ? _dictionary["key"] : (int?)null;

我想,你可以做這樣的事情(或寫一個更清晰的擴展方法)。

        object _value = _dictionary.ContainsKey(myString) ? _dictionary[myString] : (int?)null;

我不確定我是否會特別高興使用它,但是通過結合null和你的“Found”條件,我會認為你只是將問題轉移到一個空的檢查稍微下線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM