我有一个这样的类,有很多属性:
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。
答案 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);
}
}