2010-12-31 27 views
2

私は性質の束と、このようなクラスを持っている:C#印刷のプロパティ

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を使っています。

+1

お試しください。次回は質問してみてください。 –

+0

@ハンス:希望の出力を生成するコードを作成するにはどうすればよいですか? – Mark

答えて

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); 
    } 
} 
+1

'typeof(ClassName)'を 'this.GetType()'に置き換えます。 –

+0

よろしくお願いします。私はその回答を更新し、公的/私的財産を扱うようにしました。 – wsanville

3

希望するものはtypeof(ClassName).GetProperties()です。これはPropertyInfoオブジェクトの配列を返します。オブジェクトのそれぞれはNameプロパティとGetValueメソッドを持ちます。

2

だけ、このクラスを使用しようとしている場合は、このように、ToStringメソッドをオーバーライドすることができます:あなたが唯一のそのクラスを表すために必要がある場合は、これが解決策になる

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

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