将foreach循环到对象列表上(无法对类型'对象'的变量进行操作)

时间:2016-01-25 12:47:21

标签: c# list object foreach tempdata

我正在尝试将一些对象保存到列表中供以后使用。这是我存储它们的方式:

List<Engagement> engagementsList = new List<Engagement>();

foreach (Engagement engagement in db.Engagements)
{
    // Implementation here
}

TempData["DeletedE"] = engagementsList;
TempData.Keep();

然后,我正在尝试遍历列表,但是我得到了错误:

无法对&#39;对象&#39;

类型的变量进行操作

我正在通过以下方式迭代列表:

foreach (Engagement e in TempData["DeletedE"])
{
    // Implementation here...
}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

由于TempData["DeletedE"]的类型为object,因此您无法枚举它。

要做到这一点,你必须将它强制转换为IEnumerable<Engagement>

var enumerable = TempData["DeletedE"] as IEnumerable<Engagement>;

foreach (Engagement e in enumerable)
{

}

答案 1 :(得分:1)

MVC's TempData[] indexer returns an object,你无法迭代。

您需要将其转换为存储在其中的相同类型:

foreach (var engagement in (List<Engagement>)TempData["DeletedE"])
{
}

how to access an array element from tempdata中也对此进行了解释。

答案 2 :(得分:0)

将你的循环改为:

foreach (Engagement e in TempData["DeletedE"].Cast<Engagement>())
{   
}