1

WinFormで、オブジェクトのタイプに応じて、実行時に各プロパティ(ラベルとして)とその値を表示したいと思います。このようなもの:

public void ShowDetails(object anyType)
{
// Generate label per property and show value of the property against a label.
}

どうすればこれを達成できますか?異なるプロパティを持つ100以上のクラスがあります。

私はC#4.0を使用しています。

4

4 に答える 4

3

リフレクションを使用します。

PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
    object propertyValue = property.GetValue(obj, null);
}

それはあなたが始めるのに十分なはずです。

PropertyInfoまた、プロパティの名前、タイプ、アクセシビリティなど、他の多くの情報を取得することもできます。ゲッターなしでプロパティを持つことは可能です(しかし非常にまれです)ので、最初にそれをチェックしたいかもしれません。また、すべてのプロパティではなく、パブリックプロパティのみを取得することもできます。プロパティがインデクサーであるかどうかを確認することもできます。これは、の2番目のパラメーターにnull以外の値が必要になるためです。ああ、静的プロパティも返されます。あなたもそれらを望むかもしれないし、望まないかもしれません。GetValue

于 2012-10-15T14:04:52.417 に答える
2

を使用しSystem.Reflection.PropertyInfoます。すべてのプロパティ(およびサブプロパティ)をループできます

MSDNリンク

于 2012-10-15T14:04:16.993 に答える
2

プロパティとその値を辞書に簡単に保存できます

Dictionary<string,object> properties = anyType.GetType()
                              .GetProperties()
                              .ToDictionary(p=>p.Name,p=>p.GetValue(anyType,null));
于 2012-10-15T14:08:46.963 に答える
1

私はReflectionについて読みました。これにより、実行時にクラスメンバーのプロパティ名と値にアクセスできるようになります。

于 2012-10-15T14:04:49.787 に答える