【问题标题】:print properties of a class [duplicate]类的打印属性[重复]
【发布时间】:2016-03-21 12:05:11
【问题描述】:

我有一个小控制台程序,可以打印出给定类的属性。

它有效,但我想知道是否有一种方法可以做到这一点而不必实例化新类。

我问是因为我想获取项目中每个类的类名和所有类属性。

如果我可以在不必实例化每个类的情况下做到这一点,那真的会减少编程。

namespace ObjectViewer
{
    class PropertyLister
    {
        static void Main(string[] args)
        {
            Programmer programmer = new Programmer() { Id = 123, Name = "Joe", Job = "Programmer" };

            printProperties(programmer);

            Console.ReadLine();
        }

        public static void printProperties(Object jsonObject)
        {
            JObject json = JObject.FromObject(jsonObject);
            Console.WriteLine("Classname: {0}\n", jsonObject.ToString());
            Console.WriteLine("{0,-20} {1,5}\n", "Name", "Value");
            foreach (JProperty property in json.Properties()) { 
                Console.WriteLine("{0,-20} {1,5:N1}",  property.Name, property.Value);
            }
        }
    }
}

【问题讨论】:

  • 如果你不需要值,你试过Type.GetProperties()吗?

标签: c# c#-4.0 json.net .net-4.5


【解决方案1】:

您可以使用.GetProperties() 方法获取给定类型的所有属性。

【讨论】:

    【解决方案2】:

    你可以使用反射:

    class ClassA
    {
        public string NameField;
    
        public string NameProperty { get; set; }
    }
    
    public class Program
    {
        public static void Main()
        {
            Type t = typeof(ClassA);
    
            foreach(var field in t.GetFields())
            {
                Console.WriteLine(field.Name);
            }
    
            foreach(var prop in t.GetProperties())
            {
                Console.WriteLine(prop.Name);
            }
        }
    }
    

    这将输出:

    NameField
    NameProperty
    

    【讨论】:

    • 谢谢!我什至不知道你能做到这一点!
    • @999cm999 是的!反射非常强大。我建议您阅读 MSDN 文档,因为您可以做很多事情
    猜你喜欢
    • 2016-12-27
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2010-10-25
    • 2013-07-11
    相关资源
    最近更新 更多