C# C linq IEnumerable更新项

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

我有IEnumerable activeContents需要更新一个元素。 但是当我试着把它放回去时,activeContents=cm;这不起作用,我得到了同样的清单

我怎样才能解决这个问题

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();
}