C# 紧凑字典键查找

C# 紧凑字典键查找,c#,C#,有没有办法写得更简洁 return _searchRedirectionMap.ContainsKey(query) ? _searchRedirectionMap[query] : ""; 假设\u searchRedirectionMap被定义为IDictionary,您可以在IDictionary上编写一个扩展方法,该方法使用以下方法: 您可以使用TryGetValue方法,但对于string类型,该方法将返回null: _searchRedirectionMap.TryGetValue

有没有办法写得更简洁

return _searchRedirectionMap.ContainsKey(query) ? _searchRedirectionMap[query] : "";

假设
\u searchRedirectionMap
被定义为
IDictionary
,您可以在
IDictionary
上编写一个扩展方法,该方法使用以下方法:


您可以使用
TryGetValue
方法,但对于
string
类型,该方法将返回null:

_searchRedirectionMap.TryGetValue(key, out value);

文档:

如果密钥不存在,它不会返回
null
,而是不会修改
out
parameter@PhilipDaubmeier错误,它返回给定类型的默认值,即
string
null
。检查我的网页中的链接answer@PhilipDaubmeier它确实返回
null
value=default(TValue)
,因此
null
string
的情况下),因为在方法返回之前必须为out参数分配一个值。。。真丢人,我把
ref
参数搞混了
out
真丢人
IDictionary
中没有定义这样的东西,因为这会使一些if-else结构过时。这反过来又使代码在大多数情况下更具可读性……这是有点特定的(在我脑海中,我想不出在我的项目中有哪一段代码会使用默认值,如果它不在字典中;通常如果它不在那里,我需要做一些完全不同的事情)并且有其性能缺陷,因为即使字典实际上包含键,也必须获取/执行/解析
defaultValue
,并将其传递到方法中。但这就是扩展方法的用途:如果你需要这种方法,因为你经常使用它?没问题!我只是认为它应该在BCL中是有争议的。@ChrisSinclair实际上,一个相当有用的模式是一个字典,它在第一次访问缺少的键时为其插入一个默认值,这避免了在必要时频繁地重新创建默认值。(例如,进行频率计数。)不确定BCL中是否有这样的情况,但为了一个健全的API,您可能希望为此使用一个单独的类,而不是一个扩展。@millimoose:我认为这是可行的,如果您在构造函数中提供一个固定值的话。但是,一个方法获取一个值或一个默认值(不将该值插入该键),然后在消费代码中频繁使用它,对我来说似乎有点过于特定于上下文。重复:您是否设法回答了您的问题@Roman?:)
return _searchRedirectionMap.GetValueOrDefault(query, string.Empty);
_searchRedirectionMap.TryGetValue(key, out value);