Ada*_*kin 5 c# python dictionary
在 Python 中,如果我有一个 dict,并且我想从一个可能不存在密钥的 dict 中获取一个值,我会执行以下操作:
lookupValue = somedict.get(someKey, someDefaultValue)
Run Code Online (Sandbox Code Playgroud)
其中,如果someKey不存在,则someDefaultValue返回。
在 C# 中,有些TryGetValue()类似:
var lookupValue;
if(!somedict.TryGetValue(someKey, lookupValue))
lookupValue = someDefaultValue;
Run Code Online (Sandbox Code Playgroud)
一个问题是,如果someKey是null然后抛出异常,所以你进行了空检查:
var lookupValue = someDefaultValue;
if (someKey != null && !somedict.TryGetValue(someKey, lookupValue))
lookupValue = someDefaultValue;
Run Code Online (Sandbox Code Playgroud)
哪个,TBH,是 icky(3 行用于 dict 查找?)有没有更简洁(即 1 行)的方式,很像 Python 的get()?
这是正确的使用方法TryGetValue。请注意,您不能在调用之前将返回值设置为默认值TryGetValue,而是将其返回,TryGetValue如果未找到键,则会将其重置为默认值。
public static TValue GetOrDefault<TKey, TValue>(
this IDictionary<TKey, TValue> dictionary,
TKey key,
TValue defaultValue)
{
TValue value;
if(key == null || !dictionary.TryGetValue(key, out value))
return defaultValue;
return value;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果 key 是null,您可能实际上想要一个例外,因为这对于字典来说总是一个无效的键。
现在可以使用 C# 7.0 内联输出变量声明将其简化为以下内容。
return key == null || !dictionary.TryGetValue(key, out var value)
? defaultValue
: value;
Run Code Online (Sandbox Code Playgroud)