跟进Direct access to full string representation of object。
我正在尝试将对象的内容记录到文本文件中。我可以通过在即时窗口中执行此行来获取我想要记录的属性 - 值对:
?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
我做错了什么?
答案 0 :(得分:2)
您没有使用反射,只是对象的属性“属性”。这与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提供的)。