Использование отражения для имитации Debug.Print в VB.Net - PullRequest
1 голос
/ 23 января 2012

Отслеживать до Прямой доступ к полному строковому представлению объекта .

Я пытаюсь записать содержимое объекта в текстовый файл.Я могу получить пары свойство-значение, которые я хочу зарегистрировать, выполнив эту строку в ближайшем окне:

?mDb.DatabaseOptions
{Microsoft.SqlServer.Management.Smo.DatabaseOptions}
    AnsiNullDefault: False
    ...
    UserData: Nothing

К сожалению, я не могу просто зарегистрировать mDb.DatabaseOptions.ToString, потому что это не возвращает никакого свойствапары

Я пытался свернуть свой код, используя отражение.Это работает, но возвращает намного больше информации, чем мне нужно.debug.print возвращает 33 пары свойство-значение, но следующий код возвращает 95 пар свойство-значение.

For i As Integer = 0 To mDb.DatabaseOptions.Properties.Count - 1
    WriteLine(mDb.DatabaseOptions.Properties(i).Name & ": " & _
              mDb.DatabaseOptions.Properties(i).Value.ToString)
Next

Что я делаю не так?

1 Ответ

2 голосов
/ 24 января 2012

Вы не используете отражение, просто свойство "Свойства" вашего объекта.Я считаю, что это более точно соответствует тому, что делает Debug.Print:

Public Sub WriteAsDebug(ByVal obj As Object)
    For Each prop In obj.GetType.GetProperties()
        WriteLine("{0}: {1}", prop.Name, prop.GetValue(obj, Nothing).ToString)
    Next
End Sub

Этот метод получает (путем отражения) все открытые свойства, определенные в типе объекта, и записывает имя свойства и значение (To String) в конкретном экземпляре объекта.Отказ от ответственности, я почти уверен, что этот метод терпит неудачу при попытке получить доступ к индексированным свойствам (свойства с параметрами).

Я не уверен, что Debug.Print также сообщает только об открытых членах, если требуется больше членов, проверьтеПараметры BindingFlags для метода GetProperties .Вы также можете получить дополнительную информацию о типе PropertyInfo , который возвращает метод.

Однако используемое свойство Properties может давать данные, не включенные в свойства класса (чтоОтладка. Печать дает).

...