使用C#反射打印系统信息。

时间:2014-07-17 07:27:42

标签: c# system.reflection

我目前正在从头学习C#,我偶然发现了一个难以理解的主题。我想在控制台中打印出有关系统的信息。我读到了Troelson中的反思,并决定尝试一下,所以我用Google搜索并找到了一个针对此问题设计的Windows窗体项目。我尝试制作一个类似的控制台应用程序但是当我尝试打印时,我会在部件上得到一个未处理的异常。关于如何使这项工作或解释我做错了什么(我当然有)的任何提示都会非常有帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection; 
namespace MachineInfo
{
    class Program
    {
        static void Main(string[] args)
        {
            Type propertytype = typeof(System.Windows.Forms.SystemInformation);
            PropertyInfo[] property = propertytype.GetProperties();
            string str; 
            for(int i=0; i<property.Length; i++ )
            {
                str = property[i].ToString();
                Type prop = typeof(System.Windows.Forms.SystemInformation);
                PropertyInfo innerproperty = prop.GetProperty(str);
                Console.WriteLine(innerproperty.ToString()); 
            }

        }
    }

}

1 个答案:

答案 0 :(得分:1)

你只需要:

for(int i=0; i<property.Length; i++ )
{
   Console.WriteLine("{0} : {1}",
                property[i].Name, 
                property[i].GetValue(null).ToString());
}

property[i].ToString();返回类型名称PropertyInfo,并且您尝试获取名为PropertyInfo的属性,该属性不存在。

此外,如果您想获取静态属性,请不要忘记指定BindingFlags

var flags = BindingFlags.Public | BindingFlags.Static;
PropertyInfo[] property = propertytype.GetProperties(flags);