如果密钥丢失,索引器将抛出异常.是否有IDictionary的实现会返回default(T)

我知道TryGetValue()方法,但这不可能与LINQ一起使用.

这能有效地满足我的需求吗?:

myDict.FirstOrDefault(a => a.Key == someKeyKalue);

我认为它不会,因为我认为它会迭代密钥,而不是使用哈希查找.

推荐答案

事实上,这根本不会有效率.

根据 comments ,在.Net Core 2+/NetStandard 2.1+/Net 5MS added the extension method GetValueOrDefault()

对于早期版本,您可以自己编写扩展方法:

public static TValue GetValueOrDefault<TKey,TValue>
    (this IDictionary<TKey, TValue> dictionary, TKey key)
{
    TValue ret;
    // Ignore return value
    dictionary.TryGetValue(key, out ret);
    return ret;
}

或使用C#7.1:

public static TValue GetValueOrDefault<TKey,TValue>
    (this IDictionary<TKey, TValue> dictionary, TKey key) =>
    dictionary.TryGetValue(key, out var ret) ? ret : default;

它使用:

  • 一种表达式体方法(C#6)
  • 输出变量(C#7.0)
  • 默认文字(C#7.1)

.net相关问答推荐

为什么在WinForm应用程序中创建组件类椭圆会在www.example.com中没有响应

找不到包Microsoft.VisualStudio.Azure.Containers.Tools.Targets

为什么DotNet新的webapi;命令会为我生成不同的文件夹

无法对.NET MAUI类库进行单元测试

Npgsql Minimum Pool Size 似乎没有被考虑在内

使用 PostAsJsonAsync C# 时出现错误请求

是否可以将 SandCastle 创建的两个页面合并到一个主页中?

读取方法的属性值

如何更改 double.ToString() 中小数点的符号?

什么版本的 .NET 附带什么版本的 Windows?

如何在可取消的异步/等待中处理 TransactionScope?

没有 @Html.Button !

如何使用 C# 创建自签名证书?

在 C# 中,为什么不能将 List 对象存储在 List 变量中

如何使用 DateTime 指定一天中的最晚时间

带有嵌套控件的设计模式

如何隐藏 WPF ListView 的标题?

如何判断uri字符串是否有效

如何使用 AutoMapper .ForMember?

枚举和匹配属性的 C# 命名约定