我正在实现一个自定义控件,它接收类型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而自定义控件不知道。此外,自定义控件本身并不计划为泛型类。 希望这有助于集中我的问题。
答案 0 :(得分:1)
您可以将数据源定义为普通IEnumerable
,然后使用反射获取每种类型的值。例如:
private IEnumerable _dataSource;
foreach (object o in _dataSource)
{
foreach (string propName in _properties)
{
PropertyInfo prop = o.GetType().GetProperty(propName);
// ...
}
}