在List <t> </t>中转换IEnumerable

时间:2011-07-25 06:20:26

标签: c# asp.net linq entity-framework ado.net

我正在创建一个在数据源中接收DataSet或List

的控件

如何在CreateChildControls事件中将IEnumerable转换为List?

protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
{
    if (dataSource is System.Data.DataSet)
    {
    }
    else if(dataSource is IList)
    {
    }
}

3 个答案:

答案 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方法之前使用它。