在List <T>中转换IEnumerable

Pab*_*ind 7 c# linq asp.net ado.net entity-framework

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

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

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

bit*_*onk 13

通常会使用IEnumerable<T>.ToList()Linq 的扩展方法,但在你的情况下,你不能使用它(马上),因为你有非泛型IEnumerable接口.你必须首先施放它(也使用Linq):

datasource.Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

无论你原来的收藏是什么,这都会成功.

  • 我同意,转换回来不仅仅是为了性能,它增强了你的信息保留(而不是拥有一个对象列表,你有原始列表. (2认同)

Dav*_*ell 6

我重新阅读了您的问题,似乎您正在接收一个数据集,该数据集是ALREADY列表或DataSet,但它被转换为IEnumerable.在这种情况下,干脆做

IList myList = (IList)datasource //will throw exception if invalid
Run Code Online (Sandbox Code Playgroud)

要么

IList myList = datasource as IList //mylist will be null if conversion cannot be made
Run Code Online (Sandbox Code Playgroud)