c# - 查找 ArgumentException.Message 的非值部分

标签 c# exception

具有非平凡 ParamNameArgumentException 有一个换行符拆分 Message,其最后一行描述了它的 ParamName ;例如,new ArgumentException("Some error", "myParam").Message

Some error
Parameter name: myParam

现在,在使用我们暂时将其视为黑盒并生成带有非常有用的错误消息的 ArgumentException 的库时,我发现自己想要获取这些错误消息,添加一些上下文给他们,并最终将信息呈现给我的用户。这样做时,我想去掉异常消息的“参数名称”部分,因为它往往只在开发过程中有用。

所以问题是:如何以最优雅的方式摆脱包含“参数名称”的行? ArgumentExceptionParamName 属性允许我获取参数名称本身,但似乎没有直接的方法来获取排除参数名称的消息。我可以做的一件事是简单地获取除最后一行之外的所有 Message 行,但这仅在 ParamName 不是 null;我可以明确地检查这一点,但此时我正在执行一堆解析来解决看起来像是 .NET 单行代码的问题。

最佳答案

以下扩展方法稍微简洁地解决了这个问题,但并非没有直接操作 ex.Message:

public static string GetError(this ArgumentException ex)
    => ex.ParamName == null ?
        ex.Message : ex.Message.Remove(ex.Message.LastIndexOf(Environment.NewLine));

关于c# - 查找 ArgumentException.Message 的非值部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311642/

相关文章:

matlab中断抛出异常

c# - lambda 表达式中的时间跨度

c# - 使用 REST Web 服务 API 在 MVC3 应用程序中进行对象映射

exception - Neko 服务器、Neko/OpenFL 客户端 : std@socket_read exception

java - 验证输入并防止 try/catch 退出

c++ - 试图在递归函数 : Unhandled exception/Stack overflow 中捕获失败的分配

c# - 如何使用 Windows 应用程序在 C# 中禁用 ComboBox 上的快捷键?

c# - 将时间转换为特定时区然后转换为 UTC 时如何获得偏移量? C#

c# - 将图像转换为按钮 WPF

java - XML 阅读器错误 : unexpected character content exception while invoking webservice