具有非平凡 ParamName
的 ArgumentException
有一个换行符拆分 Message
,其最后一行描述了它的 ParamName
;例如,new ArgumentException("Some error", "myParam").Message
是
Some error
Parameter name: myParam
现在,在使用我们暂时将其视为黑盒并生成带有非常有用的错误消息的 ArgumentException
的库时,我发现自己想要获取这些错误消息,添加一些上下文给他们,并最终将信息呈现给我的用户。这样做时,我想去掉异常消息的“参数名称”部分,因为它往往只在开发过程中有用。
所以问题是:如何以最优雅的方式摆脱包含“参数名称”的行? ArgumentException
的 ParamName
属性允许我获取参数名称本身,但似乎没有直接的方法来获取排除参数名称的消息。我可以做的一件事是简单地获取除最后一行之外的所有 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/