C# C linq IEnumerable更新项
我有IEnumerable activeContents需要更新一个元素。 但是当我试着把它放回去时,activeContents=cm;这不起作用,我得到了同样的清单 我怎样才能解决这个问题C# C linq IEnumerable更新项,c#,linq,ienumerable,C#,Linq,Ienumerable,我有IEnumerable activeContents需要更新一个元素。 但是当我试着把它放回去时,activeContents=cm;这不起作用,我得到了同样的清单 我怎样才能解决这个问题 ContentModel ActiveContent = contentToAction; List<ContentModel> cm = activeContents.ToList(); cm.Remove(ActiveContent); ActiveContent.seq
ContentModel ActiveContent = contentToAction;
List<ContentModel> cm = activeContents.ToList();
cm.Remove(ActiveContent);
ActiveContent.seq = seq;
cm.Add(ActiveContent);
activeContents = null;
activeContents = cm;
activeContents = activeContents.OrderBy(con => con.seq);
我在这里读了一些文章,但没有找到解决方法。这段代码的上下文是什么?是否将activeContents作为参数传入?还有,什么是ContentModel的声明?这是一个值类型的结构类还是引用类型的类 如果ContentModel是一个类,那么您不需要添加和删除元素来更改seq属性,我希望这是一个属性……公共字段很讨厌:p。只需在列表中找到元素并更改其中已有的元素。如果contentAction值实际上已经是列表中的实例,则更好 至于更大的问题,根据您提供的少量信息,代码可能如下所示:
void SomeMethod()
{
// These are initialized somehow:
IEnumerable<ContentModel> activeContents = ... ;
ContentModel contentToAction = ... ;
int seq = ... ;
UpdateSequence(activeContents, contentToAction, seq);
}
void UpdateSequence(IEnumerable<ContentModel> activeContents,
ContentModel activeContents, int seq)
{
ContentModel ActiveContent = contentToAction;
List<ContentModel> cm = activeContents.ToList();
cm.Remove(ActiveContent);
ActiveContent.seq = seq;
cm.Add(ActiveContent);
activeContents = null; // superfluous in any case
activeContents = cm; // ditto here
activeContents = activeContents.OrderBy(con => con.seq);
}
void SomeMethod()
{
// These are initialized somehow:
IEnumerable<ContentModel> activeContents = ... ;
ContentModel contentToAction = ... ;
int seq = ... ;
UpdateSequence(activeContents, contentToAction, seq);
}
IEnumerable<ContentModel> UpdateSequence(IEnumerable<ContentModel> activeContents,
ContentModel contentToAction, int seq)
{
List<ContentModel> cm = activeContents.ToList();
cm.Remove(contentToAction);
contentToAction.seq = seq;
cm.Add(contentToAction);
return cm.OrderBy(con => con.seq).ToList();
}
最后,我要指出,如果activeContents通常以列表的形式存储,那么在这里将其视为IEnumerable只会带来伤害。如果是这样的话,您还可以利用它的列表特性,将其排序到位。为什么不得到相同的列表?您正在添加然后删除同一项。你能解释一下问题是什么吗?我正在更改项,我不能在IEnumerabley中进行更改你可以在可枚举中进行更改,但不能在for循环中进行更改。如果这是您正在做的,请使用索引循环。您可以添加一个示例吗
IEnumerable<ContentModel> UpdateSequence(IEnumerable<ContentModel> activeContents,
ContentModel contentToAction, int seq)
{
contentToAction.seq = seq;
return activeContents.OrderBy(con => con.seq).ToList();
}