0

タイプ T (文字列として) のプロパティのリストと IList を受け取り、それを HTML テーブルにレンダリングするカスタム コントロールを実装しています。マークアップとCreateChildControlsパーツダウンがあります。

私がやりたいことは、リフレクションを介してプロパティを調べforeach、リストで実行されているループ内のプロパティの値を取得することです。

コンパイル時に T が何であるかわからないので、任意の T の List に対応できるようにしたいと考えています。

これを行う最良の方法は何ですか?

編集:

public class CustomControl : System.Web.UI.WebControls.WebControl, INamingContainer
{
    private List<string> _properties;
    private **?????????** _dataSource;

    public List<string> Properties
    { set { _properties = value; } }

    public **?????????** DataSource
    { set { _dataSource = value; } }
}

次に、Properties の値を次のように設定したとします。

_properties = new List<string>()
        {
            "FirstName",
            "LastName"
        };

タイプ person のオブジェクトのリストを渡します。

public class Person
{
    public string FirstName
    { get; set; }
    public string LastName
    { get; set; }
}

person calss は単なるプレースホルダーです。リスト内の任意の T に対してこれを行いたいと思います。呼び出し元のクラスは型 T を認識していますが、カスタム コントロールは認識していません。また、カスタム コントロール自体がジェネリック クラスになる予定はありません。これが私の質問に焦点を当てるのに役立つことを願っています。

4

1 に答える 1

1

データソースをプレーンとして定義IEnumerableし、リフレクションを使用して各タイプの値を取得できます。例えば:

private IEnumerable _dataSource;

foreach (object o in _dataSource)
{
    foreach (string propName in _properties)
    {
        PropertyInfo prop = o.GetType().GetProperty(propName);

        // ...
    }
}
于 2012-11-21T21:49:02.277 に答える