Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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# 在对象列表上循环foreach(无法对对象类型为';的变量进行操作)_C#_List_Object_Foreach_Tempdata - Fatal编程技术网

C# 在对象列表上循环foreach(无法对对象类型为';的变量进行操作)

C# 在对象列表上循环foreach(无法对对象类型为';的变量进行操作),c#,list,object,foreach,tempdata,C#,List,Object,Foreach,Tempdata,我正在尝试将一些对象保存到列表中以供以后使用。以下是我存储它们的方式: List<Engagement> engagementsList = new List<Engagement>(); foreach (Engagement engagement in db.Engagements) { // Implementation here } TempData["DeletedE"] = engagementsList; TempData.Keep(); 非常

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

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

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

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

非常感谢您的帮助。

将您的循环更改为:

foreach (Engagement e in TempData["DeletedE"].Cast<Engagement>())
{   
}
foreach(TempData[“DeletedE”].Cast()中的交战e)
{   
}

将循环更改为:

foreach (Engagement e in TempData["DeletedE"].Cast<Engagement>())
{   
}
foreach(TempData[“DeletedE”].Cast()中的交战e)
{   
}
,您无法对其进行迭代

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

foreach (var engagement in (List<Engagement>)TempData["DeletedE"])
{
}
foreach(风险值参与(列表)TempData[“DeletedE”])
{
}
这也在中进行了解释。

,您不能在上面进行迭代

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

foreach (var engagement in (List<Engagement>)TempData["DeletedE"])
{
}
foreach(风险值参与(列表)TempData[“DeletedE”])
{
}
由于
TempData[“DeletedE”]
属于
对象类型,因此无法枚举它

为此,必须将其强制转换为
IEnumerable
,如下所示:

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

foreach (Engagement e in enumerable)
{

}
var enumerable=TempData[“DeletedE”]作为IEnumerable;
foreach(参与可枚举项目)
{
}
由于
TempData[“DeletedE”]
属于
对象类型,因此无法枚举它

为此,必须将其强制转换为
IEnumerable
,如下所示:

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

foreach (Engagement e in enumerable)
{

}
var enumerable=TempData[“DeletedE”]作为IEnumerable;
foreach(参与可枚举项目)
{
}

没有
Cast()
扩展方法可以在
对象上运行。哦,我明白了,不清楚TempData是什么类型,所以您必须先对其进行强制转换。现在有一些正确的答案没有对
object
有效的
Cast()
扩展方法。哦,我明白了,不清楚TempData是什么类型,所以您必须先对它进行强制转换。现在有一些正确的答案虽然这应该可以工作,但我在for循环中遇到一个错误:“对象引用未设置为对象的实例。”-我想你不知道为什么会发生这种情况?无意冒犯,但请尝试搜索。这意味着某个东西是
null
,我怀疑
TempData[“DeletedE”]
就是它。请记住
TempData
仅在一个重定向或一个控制器视图事务期间保留其值。未执行任何操作,我一直在调试它,无法找出它,因此我认为可能是我忽略了某些内容,是的,Temp数据已作为null传递。如果您感兴趣,我决定改用一个会话,现在一切都正常了:)虽然这应该可以工作,但我在for循环中遇到了一个错误:“对象引用未设置为对象的实例。”-我想你不知道为什么会发生这种情况?无意冒犯,但请尝试搜索。这意味着某个东西是
null
,我怀疑
TempData[“DeletedE”]
就是它。请记住
TempData
仅在一个重定向或一个控制器视图事务期间保留其值。未执行任何操作,我一直在调试它,无法找出它,因此我认为可能是我忽略了某些内容,是的,Temp数据已作为null传递。如果您感兴趣,我决定改用一个会话,现在一切都正常了:)我如何将元素“添加”到此IEnumerable中?如果需要添加项,请转换为
IList
List
,而不是
IEnumerable
您不想修改视图中的模型属性。我如何将元素“添加”到此IEnumerable中?如果需要添加项,然后强制转换到
IList
List
,而不是
IEnumerable
您不想修改视图中的模型属性。