<p>Par reflexion ; pour une instance :</p>
<pre><code class="lang-auto">obj.GetType().GetProperties();
</code></pre>
<p>pour un type :</p>
<pre><code class="lang-auto">typeof(Foo).GetProperties();
</code></pre>
<p>par exemple :</p>
<pre><code class="lang-auto">class Foo {
public int A {get;set;}
public string B {get;set;}
}
...
Foo foo = new Foo {A = 1, B = "abc"};
foreach(var prop in foo.GetType().GetProperties()) {
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(foo, null));
}
</code></pre>
<p>Suite aux retours…</p>
<ul>
<li>
<p>Pour obtenir la valeur des proprietes statiques, passez <code>null</code> comme premier argument a <code>GetValue</code></p>
</li>
<li>
<p>Pour examiner les proprietes non publiques, utilisez (par exemple) <code>GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)</code> (qui retourne toutes les proprietes d’instance publiques/privees).</p>
</li>
</ul>