KeyNotFoundException 信息

2024-02-02

我有一个 C# Silverlight 应用程序,它随机抛出一个“KeyNotFoundException“。我不知道找不到什么钥匙。这让我想到了两个问题:

  1. Does a KeyNotFoundException存储/暴露它试图找到什么密钥?当我查看文档 http://msdn.microsoft.com/en-us/library/9a35cy81.aspx,我没有看到任何暗示此信息可用的信息。
  2. 我在通用 Application.UnhandledException 事件处理程序中捕获/记录此异常。我的问题是,如果我在这里捕获该事件,我是否可以将 ExceptionObject 转换为 KeyNotFoundException,并且如果按照 #1 中的要求公开,仍然可以获得关键信息?

非常感谢你的帮助!


当字典抛出一个KeyNotFoundException,它不会尝试告诉您它试图找到哪个键。因此,我通常尝试在字典上使用扩展方法,这样如果我的程序出现故障,我就知道它尝试查找哪个键。虽然了解堆栈跟踪很有帮助,但通常还不够,特别是当查找发生在循环内时。

public static TValue GetOrThrow<TKey,TValue>(this IDictionary<TKey,TValue> d, TKey key)
{
    try
    {
        return d[key];
    }
    catch(KeyNotFoundException ex)
    {
        throw new KeyNotFoundException(key.ToString() 
            + " was not found in the dictionary");   
    }  
}  

更新/澄清

我实际上并没有打电话key.ToString()因为它可能是一种不会覆盖的类型ToString()。默认情况下会打印类型名称:"MyLibrary.SomeType was not found.",这没有那么有帮助"{ managerId: 123, employeeId: 456} was not found.".

因此,我将其序列化为 json,如下所示:

var serializedKey = Newtonsoft.Json.JsonConvert.SerializeObject(
    key,
    new JsonSerializerSettings
    {
        //make it easy for humans to read
        Formatting = Formatting.Indented, 
        //don't break on loops...that would cause a new error that hides the KeyNotFound!
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
    });

此外,我发现将特定键值放入异常消息中可能会导致难以在日志中聚合异常,具体取决于您使用的工具类型。 (我正在使用一个将错误按外部异常的消息)。如果这影响到您,您可能需要将详细信息放入内部异常中:
throw new KeyNotFoundException( "key was not found", new KeyNotFoundException(serializedKey));

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KeyNotFoundException 信息 的相关文章

随机推荐

  • 使用 jquery.validation equalTo( other ) 确保“Sunday”是输入值

    RE http docs jquery com Plugins Validation http docs jquery com Plugins Validation 我正在设置一个简单的联系表单 并希望使用 测验 作为简单的垃圾邮件防护 因
  • 根据每个 Pod 的活动连接数扩展 GKE Pod

    我有一个正在运行的 GKE 集群 其中包含使用目标 CPU 利用率指标的 HPA 这没问题 但 CPU 利用率对我们来说并不是最佳的扩展指标 分析表明 活动连接计数是一般平台负载的良好指标 因此 我们希望将其视为我们的主要扩展指标 为此 我
  • 转换为 hls 时,FFmpeg 烧录的字幕不同步

    我有一个刻有字幕的文件 并且它们完全同步 这是文件 https 983yqbz442 s3 amazonaws com little mermaid captions mp4 https 983yqbz442 s3 amazonaws co
  • Java代码减少行与行之间的垂直间距

    我正在创建一个包含一些内容的 PDF 我的要求是在创建 PDF 时减少行间距 以便在单页中容纳更多行数 如何减少行与行之间的间距 Document document null PdfWriter getInstance document n
  • 使用单个 log4j2 xml 文件配置 log4j2 和 log4j

    我已将应用程序迁移到 log4j 2 并通过 log4j2 xml 配置它 但是 我使用的一些库依赖于 log4j 1 如果我使用以下命令运行应用程序 Dlog4j configurationFile path to log4j2 xml
  • R 中的模式匹配和替换

    我对正则表达式一点也不熟悉 想在 R 中进行模式匹配和替换 我想更换图案 1 2在向量中 original c 1 2 10 11 向量的每个值vec c 1 2 我正在寻找的结果是以下向量 c 1 2 10 11 我不知道该怎么做 我尝试
  • Laravel 5.3 使用 url 中的图像进行干预/图像 NotReadableException

    如何处理以下错误 以便我的脚本在出现以下错误时不会停止工作发生异常 AbstractDecoder php 第 302 行中的 NotReadableException 图像源不是 可读的 我尝试使用以下内容 file 是图像的 url R
  • 获取单词和空格字符串中的第一个单词 - 空格前的子串第一个单词

    我有一个包含单词和空格的字符串 2h 3m 1s 我想提取2h脱离它 所以在第一个空格之前得到所有的东西 var date 1 340d 1h 15m 52s I want to extract 1 340d 这样做的最佳实践是什么 什么子
  • Firefox 实时 http 标头,缓存控制后的花括号:无缓存

    我正在设置一个 php cURL 脚本来复制我在实时标题中看到的内容 这是一个例子 Cache Control no cache username email protected cdn cgi l email protection pas
  • mysql 在查找和插入时将整数截断为奇怪的数字

    我在 php 中使用 Laravel 的 Eloquent 来插入和查找记录 发生的情况是 当我插入一个整数时 这里是 1001094515039 它会将其更改为 367135071 并将其存储在字段中 字段类型是 Bigint 长度为 2
  • Python 守护进程打包最佳实践

    我有一个用 python 编写的工具 通常应该作为守护进程运行 打包此工具进行分发的最佳实践是什么 特别是应如何处理设置文件和守护进程可执行文件 脚本 相关地 是否有任何通用工具可用于设置守护进程以在启动时运行 以适合给定的平台 即init
  • 如何在flutter插件中导入AAR文件?

    我正在使用 flutter 插件并想要导入 aarandroid 项目中的插件部分 我尝试打开 android 项目并导入 aar通过导入模块来项目 将其包含在setting gradle并将其添加到依赖项中build grade 就像任何
  • 目标文件和共享目标文件之间的关系

    共享对象之间的关系是什么 so 文件和对象 o file 你能通过例子解释一下吗 假设您有以下 C 源文件 将其命名为name c include
  • 从 Firefox Addon 执行 ShellExecute

    在我的 Firefox 扩展中 我想使用 Windows 中该文件类型的 默认查看器 打开某些文件 所以基本上类似于ShellExecute OPEN Windows API 的函数调用 是否可以 如果是这样 如何才能实现这一目标 File
  • parboiled2 和 Spray 导致跨版本后缀冲突

    我试图将 parboiled2 添加为我的项目的依赖项 并遵循计算器示例 但它与喷雾冲突 我现在的build sbt文件包括 io spray spray json 1 3 1 withSources withJavadoc io spra
  • Webpack Sass - 无法解析图像

    我正在尝试通过 webpack 编译我的 Sass 编译正常的 sass 没问题 但出现错误 Module not found Error Can t resolve img twitter svg in Users Steve myweb
  • PHP 解码base64文件内容

    我有一个脚本 可以获取文件的内容并使用 base64 对其进行编码 这个脚本运行良好 现在 我想将内容解码回其原始值 我试过
  • 如何运行批处理文件以隐藏控制台窗口?

    我想在安装完成后启动我成功安装的Java程序 我原则上知道该怎么做 Run FileName app LaunchApp bat Description cm LaunchApp Flags nowait postinstall skipi
  • 如何在执行函数之前等待 Swift 中的变量? (迅速)

    下面是我的代码 我想要我的后字符串中的纬度和经度值 但是当他执行 poststring 时 我的值仍然为零 因为 swift 还没有更新位置 那么在 poststring 获取值之前如何等待纬度和经度呢 我听说过 didset 但我不知道如
  • KeyNotFoundException 信息

    我有一个 C Silverlight 应用程序 它随机抛出一个 KeyNotFoundException 我不知道找不到什么钥匙 这让我想到了两个问题 Does a KeyNotFoundException存储 暴露它试图找到什么密钥 当我