我正在尝试自定义调试对象的工具提示。为此,我在Visualizers文件夹(Can the DebuggerDisplay attribute be applied to types one doesn't own?)中拥有一个包含Assembly: DebuggerDisplay
属性(How to: Install a Visualizer)的库。
我想查看SqlDataReader
当前正在访问的所有值。
因此,我有一个属性,该属性显示用分号分隔的值列表。
<Assembly: DebuggerDisplay("{String.Join(Convert.ToChar(59).ToString(),System.Linq.Enumerable.Select(System.Linq.Enumerable.Range(0, FieldCount()), AddressOf GetValue)),nq}", Target:=GetType(SqlClient.SqlDataReader))>
或在c#
中[assembly: DebuggerDisplay(@"{String.Join(Convert.ToChar(59).ToString(),System.Linq.Enumerable.Select(System.Linq.Enumerable.Range(0, FieldCount()), GetValue)),nq}", Target = typeof(DataRow))]
问题是,该表达式是在调试时求值的,并且c#没有(需要)运算符AddressOf
。
我有一个使用ItemArray的DataRow属性,所以我在SqlDataReader中寻找了类似的东西。有一个专用字段_data
(SqlBuffer[])。问题在于数组不包含值,但其项具有属性Value。另外,仅当已经访问了值时才填充数组。
注释
DebuggerDisplay
中使用。DebuggerDisplay
<Assembly: DebuggerDisplay("{String.Join(Convert.ToChar(59).ToString(),System.Linq.Enumerable.Select(System.Linq.Enumerable.Range(0, if(FieldCount()>5,5,FieldCount())), AddressOf GetValue)),nq}{if(FieldCount()>5,Convert.ToChar(59).ToString() + Convert.ToChar(8230).ToString() , String.Empty),nq}", Target:=GetType(SqlClient.SqlDataReader))>
是否可以通过两种语言通用的语法获取值列表?