使用反射模拟VB.Net中的Debug.Print



直接访问对象的完整字符串表示的后续操作。

我正在尝试将对象的内容记录到文本文件中。我可以通过在即时窗口中执行以下行来获得我想要记录的属性值对:

?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

我做错了什么?

您没有使用反射,只是使用对象的属性"Properties"。我相信,这与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是否也只报告公共成员,如果需要更多成员,请检查GetProperties方法的BindingFlags选项。您还可以获得有关该方法返回的PropertyInfo类型的更多信息。

但是,您正在使用的Properties属性可能会提供类属性中未包含的数据(这就是Debug.Print提供的数据)。

最新更新