转换列表<custom object =“”>列出<object> </object> </custom>

时间:2013-09-03 22:22:36

标签: c# asp.net list casting

在我的asp.net应用程序中,我正在创建一个自定义用户控件(类似于GridView)。 它需要一个对象列表(如Car,Person等..)并将它们显示为表格。

由于当我尝试从自定义列表转换​​为对象列表时,对象列表可以是不同类型,因此它给出了如下错误:“无法转换类型为'System.Collections.Generic.List {{1}的对象} 1 [System.Object的]”“。

有没有更好的方法来解决这个问题?

代码就像:

1[Main.People]' to type 'System.Collections.Generic.List

3 个答案:

答案 0 :(得分:2)

您应该能够在Linq中使用Cast()扩展方法

Objects = HttpContext.Current.Items["Objects"].Cast<object>().ToList()

http://msdn.microsoft.com/en-us/library/bb341406.aspx

答案 1 :(得分:1)

由于您似乎没有实际修改代码中的列表,因此实际上并不需要将其作为列表。它可以是IEnumerable<object>

public IEnumerable<object> Objects;
protected void Page_Load(object sender, EventArgs e)
{
    Objects = (IEnumerable<object>)HttpContext.Current.Items["Objects"];
}

答案 2 :(得分:0)

制作所有课程:汽车,人员从基类继承 MyBaseClass 并将您的列表投射到该类型/类

public List<MyBaseClass> Objects = new List<MyBaseClass>();

protected void Page_Load(object sender, EventArgs e)
{
    Objects = (List<MyBaseClass>) HttpContext.Current.Items["Objects"];
}

然后你可以迭代你的List并确定确切的类型

foreach(MyBaseClass mbc in Objects)
{
    if(mbc is People)
    {
        //its a People object
    }
    else if(mbc is Car)
    {
        //ist a Car object
    }
}

请记住,在添加或创建“对象”列表时,在代码中需要将其声明为

List<MyBaseClass> Objects 

顺便说一句,你当前的列表是列表,所以这应该有效

public List<People> Objects = new List<People>();

protected void Page_Load(object sender, EventArgs e)
{
    Objects = (List<People>) HttpContext.Current.Items["Objects"];
}