在我的asp.net应用程序中,我正在创建一个自定义用户控件(类似于GridView)。 它需要一个对象列表(如Car,Person等..)并将它们显示为表格。
由于当我尝试从自定义列表转换为对象列表时,对象列表可以是不同类型,因此它给出了如下错误:“无法转换类型为'System.Collections.Generic.List {{1}的对象} 1 [System.Object的]”“。
有没有更好的方法来解决这个问题?
代码就像:
1[Main.People]' to type 'System.Collections.Generic.List
答案 0 :(得分:2)
您应该能够在Linq中使用Cast()扩展方法
Objects = HttpContext.Current.Items["Objects"].Cast<object>().ToList()
答案 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"];
}