Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 演员名单<;自定义对象>;列出<;对象>;_C#_Asp.net_List_Casting - Fatal编程技术网

C# 演员名单<;自定义对象>;列出<;对象>;

C# 演员名单<;自定义对象>;列出<;对象>;,c#,asp.net,list,casting,C#,Asp.net,List,Casting,在我的asp.net应用程序中,我正在创建一个自定义用户控件(类似于GridView)。 它获取一个对象(如汽车、人等)的列表,并将其显示为表格 由于当我尝试将自定义列表转换为对象列表时,对象列表可以是不同的类型,因此会出现如下错误:“无法将类型为“System.Collections.Generic.list1[Main.People]”的对象转换为类型“System.Collections.Generic.list1[System.object]” 有没有更好的方法来处理这个问题 代码如下:

在我的asp.net应用程序中,我正在创建一个自定义用户控件(类似于GridView)。 它获取一个对象(如汽车、人等)的列表,并将其显示为表格

由于当我尝试将自定义列表转换为对象列表时,对象列表可以是不同的类型,因此会出现如下错误:“无法将类型为“System.Collections.Generic.list
1[Main.People]”的对象转换为类型“System.Collections.Generic.list
1[System.object]”

有没有更好的方法来处理这个问题

代码如下:

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

<table>
<% int counter = 0; %>
<% foreach (object customObject in Objects)
   { %>
<% counter++; %>
<%PropertyInfo[] propertyInfos = customObject.GetType().GetProperties(); %>
<%--header--%>
<% if (counter == 1)
   {
%>
<tr>
    <%
       foreach (var reportField in propertyInfos)
       {
    %>
    <th>
        <%=reportField.Name %>
    </th>
    <%
           }
    %>
</tr>
<%
   } %>
<%--data rows--%>
<tr>
    <%
       foreach (var reportField in propertyInfos)
       {
    %>
    <td>
        <a href="?page=Details.aspx?<%=reportField.Name %>=<%=reportField.GetValue(customObject, null) %>">
            <%=reportField.GetValue(customObject, null)%>
        </a>
    </td>
    <%
           }
    %>
</tr>
<% }%>
</table>
public List Objects=new List();
受保护的无效页面加载(对象发送方、事件参数e)
{
Objects=(List)HttpContext.Current.Items[“Objects”];
}

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

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

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

公共IEnumerable对象;
受保护的无效页面加载(对象发送方、事件参数e)
{
Objects=(IEnumerable)HttpContext.Current.Items[“Objects”];
}

让你的所有类:汽车、人从基类继承MyBaseClass,并将你的列表转换为该类型/类

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

protected void Page_Load(object sender, EventArgs e)
{
    Objects = (List<MyBaseClass>) HttpContext.Current.Items["Objects"];
}
请记住,在代码中添加或创建对象列表时,需要将其声明为

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"];
}
public List Objects=new List();
受保护的无效页面加载(对象发送方、事件参数e)
{
Objects=(List)HttpContext.Current.Items[“Objects”];
}

我已编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。为什么不在整个过程中使用
Main.People
?@garrisonely,因为我正在向此控件发送不同类型的对象列表。
People
对象
,而
列表
不是
列表
@TimSchmelter感谢这个链接,它对这个概念有很好的解释。即使
继承了
MyBaseClass
,你也不能将
列表
转换为
列表
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"];
}