0
我试图实现的功能,允许2个列表进行比较,如果在两个有相同的值(id),第二个列表将覆盖元素值在第一个列表,从第二个列表中其他元素将被添加C#Linq添加元素从一个列表<custom>到另一个比较他们和改变值
private List<PotionManager.Potion.Eff> effs = new List<PotionManager.Potion.Eff>();
public string id
{
set
{
var _effs = new List<PotionManager.Potion.Eff>(PM.GetEffectsOnPotion(value).Select(x => x.Clone()));
foreach (PotionManager.Potion.Eff _eff in _effs)
{
var eff = effs.Find(x => x.id == _eff.id);
if (eff != null)
{
eff.power = _eff.power;
eff.time = _eff.time;
}
else
{
effs.Add(_eff);
}
}
}
}
有没有更有效的方法这样做的,而不是的foreach?
欢迎来到堆栈溢出!看起来你的代码目前有效,你正在寻求改进它。一般来说,这些问题对于这个网站来说太过分了,但是你可能会在[CodeReview.SE](// codereview.stackexchange.com/tour)找到更好的运气。请记住阅读[他们的要求](// codereview.stackexchange.com/help/on-topic),因为它们比本网站更严格。 – FrankerZ
您可以使用'SomeSet.Contains(_eff.id)'而不是'effs.Find(x => x.id == _eff)通过PotionManager.Potion.Eff.id创建一个ISet(例如HashSet) id)' –
您可以尝试使用IEqualityComparer接口,只需使用“Except”或“Intersect”方法进行所有比较并删除该文件即可。请参阅MSDN文档:https://msdn.microsoft。 COM/EN-US /库/ ms132151(v = vs.110)的.aspx –