有没有一种方法可以在运行时访问 DebuggerDisplayAttribute
显示的字符串?
对于我们的业务对象,我尝试在异常处理中获取自动调试器信息。在捕获异常时使用的实际对象应序列化为文本以增强异常消息。由于某些属性具有其他业务对象作为类型,因此如果递归使用可能会变得非常长。因此,我想将其序列化为类的 DebuggerDisplay
属性中已定义的信息。这些类的 ToString()
实现可能不同且无法用于此任务。
那么,在运行时是否有可能获取在调试器中显示的字符串?
有没有一种方法可以在运行时访问 DebuggerDisplayAttribute
显示的字符串?
对于我们的业务对象,我尝试在异常处理中获取自动调试器信息。在捕获异常时使用的实际对象应序列化为文本以增强异常消息。由于某些属性具有其他业务对象作为类型,因此如果递归使用可能会变得非常长。因此,我想将其序列化为类的 DebuggerDisplay
属性中已定义的信息。这些类的 ToString()
实现可能不同且无法用于此任务。
那么,在运行时是否有可能获取在调试器中显示的字符串?
可能有一些方法可以提取这些信息,但重新定义那些类并加上一个属性不是更容易吗?例如:
[DebuggerDisplay("{InfoProperty}")]
class X {
public string InfoProperty {
get { return "Debug and display info here"; }
}
}
然后,您将在错误消息/日志中包含InfoProperty
,而不是挖掘Visual Studio重新构建显示数据的方式。
当然,我假设您可以修改业务对象类,但这可能并非总是如此...
从技术上讲,当然可以 - 你可以使用反射在运行时访问DebuggerDisplayAttribute并编写一些代码来解析字符串,然后再次使用反射获取值。但是,如果花括号内有除属性和字段以外的任何内容,这种方法就不起作用了。
无论如何,我强烈建议你听取Mike或Paolo的建议 - 如果你需要更改数百个类 - 那么找到一种自动更改它们的方法 - 可以使用Resharper的结构搜索和替换,或者使用正则表达式 - 这不应该花费太长时间。
[DebuggerDisplay("{ToString()}")]
。 - JotaBe