扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
关于List<T>的问题
有一个方法A返回一个List <T>对象,在另一个方法B中接收,方法B中不能直接得到List <T>中T的类型,但却得遍历这个List <T>对象
问题:
能不能在B中通过反射获得T的对象类型?据说这是不可以的,因为在编绎期间T只作为一个占位符,在运行期间由具体类型替换。但如果这样的话,怎么遍历这个返回的List <T>对象?自带的DropDownList的DataSource可以为设定为List <T>,它这个应该也是遍历这个数据源,然后绑定的吧。
我的目的扩展dropdownlist显示一颗树结构,先看dropdownlist的绑定方法:
dropdownlist.DataSource = List <T>;
dropdownlist.DataBind();
我也想用这种方式:customContorl.DataSource = List <T>;
然后在CustomContorl里遍历这个List <T>:
protected override void Render(HtmlTextWriter writer)
{
.....
List <ITree> listTree = (List <ITree>)dataSource;
//由于不能确定T的类型,我写了一个ITree的接口。这样一来,
//每次我用这个自定义控件时T的类型都必须继承这个接口,这显然太2了
//我想实现的效果正如自带的dropdownlist那样,只需知道它的DataSource是个List <T>类型就可以了
WriteDropDownTree(listTree, -1);
.....
}
private void WriteDropDownTree <T>(List <T> listTree, int rootID) where T : ITree
{
CreateTree(listTree, rootID);
}
private void CreateTree <T>(List <T> listTree, int rootID) where T : ITree
{
foreach (T node in GetChildeNodes(listTree, rootID))
{
sbTree.AppendFormat(" <option value=\"{0}\">{1} </option>", node.ID, "..." + node.Name);
CreateSubOption(listTree,node.ID);
}
}
给你举个例子希望对你有帮助
protected void Page_Load(object sender, EventArgs e)
{
List <string> list=AddItem();
ShowItem(list);
}
private void ShowItem(List <string> list)
{
foreach (string s in list)
{
Response.Write(s+" <br/>");
}
}
private List <string> AddItem()
{
List <string> list = new List <string>();
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("4");
return list;
}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者