我正在编写一个使用反射从类中获取每个属性名称及其值的应用程序,System.Windows.Forms.SystemInformation
我当前的代码是该线程的一个片段:
马克的答案可能是最好的,但对我来说太复杂了,因为这是我第一次做反思,他的技能太高了。
所以这是我首先得到的。
foreach (PropertyInfo prop in typeof(System.Windows.Forms.SystemInformation).GetProperties())
{
richTextBox1.AppendText(prop.Name + "\t\t" + prop.GetValue(null, null)
}
但我不知道如何遍历类的属性powerstatus
。我考虑过检查当前道具是否是原始类型。如果不是,我会递归调用上层函数。所以它看起来像这样:
private void readProperties(Type T, int indent)
{
//var x = System.Windows.Forms.SystemInformation.ActiveWindowTrackingDelay;
foreach (PropertyInfo prop in T.GetProperties())
{
for (int x = 0; x < indent; x++)
richTextBox1.AppendText("\t");
richTextBox1.AppendText(prop.Name + "\t\t" + prop.GetValue(null, null) +"\n");
if (!prop.PropertyType.IsPrimitive)
readProperties(prop.PropertyType, indent+1);
//System.Windows.Forms.PowerStatus PS = new PowerStatus();
}
}
但现在我得到了例外:“Die nicht-statische Methode erfordert ein Ziel”翻译为:“非静态方法需要一个目标”
第一次递归调用函数时会引发异常。该属性是 primaryMonitorSize ,它是 typeof Size
。恕我直言,这与我正在解析类型Size
而不是System.Windows.Forms.SystemInformation.primaryMonitorSize
因为我知道实际类型但不知道它是我的程序的哪个成员这一事实有关,因为它也可能是 winForm 的大小。
那么我该如何解决这个问题呢?我感谢每一个建设性的批评。
@Edit:这是一个 msdn 示例。但它看起来并不漂亮。 http://msdn.microsoft.com/de-de/library/system.windows.forms.systeminformation.powerstatus.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2