C#打印属性

时间:2010-12-31 05:29:16

标签: c# reflection

我有一个这样的类,有很多属性:

class ClassName
{
     string Name {get; set;}
     int Age {get; set;}
     DateTime BirthDate {get; set;}
}

我想使用值的ToString()方法和属性的名称打印属性的名称及其值:

ClassName cn = new ClassName() {Name = "Mark", Age = 428, BirthData = DateTime.Now}
cn.MethodToPrint();

// Output
// Name = Mark, Age = 428, BirthDate = 12/30/2010 09:20:23 PM

反思完全没问题,事实上我认为这可能是必需的。如果它可以某种方式通过某种继承在任何类上工作,我也会很整洁。如果重要,我正在使用4.0。

3 个答案:

答案 0 :(得分:3)

你想要的是typeof(ClassName).GetProperties()。这将为您提供一组PropertyInfo个对象,每个对象都有Name属性以及GetValue方法。

答案 1 :(得分:2)

如果您只打算使用此类,则可以覆盖ToString方法,如下所示:

public override string ToString()
{
    return string.Format("Name = {1}, Age = {2}, BirthDate= {3}", Name, Age, BirthData.ToLongTimeString());
}

如果您只需要代表该类,那么这就是解决方案。你可以做点什么

ClassName jhon = ....
Console.WriteLine(jhon);

答案 2 :(得分:2)

就像你提到的那样,你可以通过反思实现这一点。确保您是using System.Reflection

public void Print()
{
    foreach (PropertyInfo prop in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
    {
        object value = prop.GetValue(this, new object[] { });
        Console.WriteLine("{0} = {1}", prop.Name, value);
    }
}