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

您可以将数据源定义为 plain 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 回答