在IList <t> </t>中访问未知类型的属性

时间:2012-11-21 15:43:34

标签: c#-4.0 generics reflection

我正在实现一个自定义控件,它接收类型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"
        };

并传入一个人类对象列表:

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

这个人只是一个占位符。我想为列表中的任何T做这个。 调用类知道类型T而自定义控件不知道。此外,自定义控件本身并不计划为泛型类。 希望这有助于集中我的问题。

1 个答案:

答案 0 :(得分:1)

您可以将数据源定义为普通IEnumerable,然后使用反射获取每种类型的值。例如:

private IEnumerable _dataSource;

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

        // ...
    }
}