Кросс-языковой индекс DataRow в DebuggerDisplay
Я пытаюсь настроить подсказки отлаженных объектов. Для этого у меня есть библиотека, включающая Assembly: DebuggerDisplay
Атрибуты ( Можно ли применить атрибут DebuggerDisplay к типам, которые не принадлежат?) в папке "Визуализаторы" ( Как: установить визуализатор).
Я хотел бы видеть индекс DataRow, поэтому я в vb.net
<Assembly: DebuggerDisplay("Idx = {Table.Rows.IndexOf(Me)}", Target:=GetType(DataRow))>
или в с #
[assembly: DebuggerDisplay(@"Idx = {Table.Rows.IndexOf(this)}", Target = typeof(DataRow))]
Проблема заключается в том, что выражение оценивается во время отладки и самообращения объекта (Me
Икс this
) отличается на обоих языках. Итак, я получаю
CS0103 The name 'Me' does not exist in the current context
в подсказке, когда я отлаживаю код C#.
Есть ли способ получить индекс DataRow с синтаксисом, общим для обоих языков?
1 ответ
Исходный код Rows.IndexOf
public Int32 IndexOf(DataRow row) {
if ((null == row) || (row.Table != this.table) || ((0 == row.RBTreeNodeId) && (row.RowState == DataRowState.Detached))) //Webdata 102857
return -1;
return list.IndexOf(row.RBTreeNodeId, row);
}
показывает, что возвращает результат list.IndexOf
public int IndexOf (int nodeId, K item)
{
int index = -1;
// BIG ASSUMPTION: There is not satellite tree, this is INDEX_ONLY.
if (nodeId != NIL)
{
if ( (Object) Key(nodeId) == (Object)item) {
return GetIndexByNode(nodeId);
}
if ( (index=IndexOf(Left(nodeId), item)) != -1) {
return index;
}
if ( (index=IndexOf(Right(nodeId), item)) != -1) {
return index;
}
}
return index;
}
Если мы предположим, что это действительно для вызова GetIndexByNode
прямо и передать DataRow.RBTreeNodeId
значение непосредственно, тогда должно работать следующее.
[assembly: DebuggerDisplay(@"Index = {Table.Rows.list.GetIndexByNode(RBTreeNodeId)}", Target = typeof(System.Data.DataRow))]