这段代码的上下文是什么?您是否将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();
}
以上假设ContentModel 是一个结构。如果它是一个类并且您保证 contentToAction 对象已经在 activeContents 列表中,那么这个版本也可以工作:
IEnumerable<ContentModel> UpdateSequence(IEnumerable<ContentModel> activeContents,
ContentModel contentToAction, int seq)
{
contentToAction.seq = seq;
return activeContents.OrderBy(con => con.seq).ToList();
}
最后,我要指出,如果activeContents 通常被存储为List<T>,那么在这里将其视为IEnumerable<T> 只会造成伤害。如果是这种情况,您不妨利用其List<T> 特性并就地对其进行排序。