Свойства печати C # - PullRequest
       4

Свойства печати C #

2 голосов
/ 31 декабря 2010

У меня есть такой класс с кучей свойств:

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 ]

3 голосов
/ 31 декабря 2010

То, что вы хотите, это typeof(ClassName).GetProperties(). Это даст вам массив PropertyInfo объектов, каждый из которых имеет свойство Name, а также метод GetValue.

2 голосов
/ 31 декабря 2010

Как вы упомянули, вы можете сделать это с помощью отражения. Убедитесь, что вы 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);
    }
}
2 голосов
/ 31 декабря 2010

Если вы собираетесь использовать только этот класс, вы можете переопределить метод ToString, например:

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

Если вам нужно представить только этот класс, то это будет решением.Вы можете сделать что-то вроде

ClassName jhon = ....
Console.WriteLine(jhon);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...