我正在创建一个在数据源中接收DataSet或List
的控件如何在CreateChildControls事件中将IEnumerable转换为List?
protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
{
if (dataSource is System.Data.DataSet)
{
}
else if(dataSource is IList)
{
}
}
答案 0 :(得分:13)
通常会使用Linq的IEnumerable<T>.ToList()
扩展方法,但在您的情况下,您不能使用它(马上),因为您具有非通用IEnumerable
接口。你必须首先施放它(也使用Linq):
datasource.Cast<object>().ToList();
无论你最初的收藏是什么,这都会成功。
答案 1 :(得分:6)
我重新阅读了您的问题,似乎您正在接收一个数据集,该数据集是ALREADY列表或DataSet,但它被强制转换为IEnumerable。在这种情况下,只需执行
IList myList = (IList)datasource //will throw exception if invalid
或
IList myList = datasource as IList //mylist will be null if conversion cannot be made
答案 2 :(得分:0)
回答你的问题'我如何获得原始类型而不设置对象类型?'。
.NET框架中的每个类型都包含GetType
方法来获取指定对象的类型。您可以在ToList
方法之前使用它。