2017-06-01 44 views
2

带有不平凡ParamNameArgumentException有一个换行符Message,其最后一行描述了它的ParamName;例如,new ArgumentException("Some error", "myParam").Message寻找ArgumentException.Message的非价值部分

Some error 
Parameter name: myParam 

现在,在使用我们会考虑黑匣子现在图书馆和产生ArgumentException s的非常有用的错误信息,我多么希望自己采取这些错误信息,添加给他们一些背景,并最终将信息呈现给我的用户。在这样做时,我想摆脱异常消息的“参数名称”部分,因为这只在开发过程中才有用。

所以问题是:如何以最优雅的方式摆脱包含“参数名称”的行? ArgumentExceptionParamName属性允许我自己获取参数名称,但似乎没有直接的方式来获取排除参数名称的消息。我可以做的一件事就是简单地取Message以外的所有行,但只适用于ParamName不是null;我可以明确地检查这一点,但在这一点上,我正在执行一堆解析来解决看起来像.NET一样的东西。

回答

0

下面的扩展方法解决了这个问题有点简洁但也不是没有直接操纵ex.Message

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