如何使用Collection2中的匹配对象(按名称和描述)替换Collection1中的对象?
此外,Collection2中匹配操作的对象必须在一定范围内,例如0-20。索引为>的对象Collection2中的20需要附加到Collection1。
答案 0 :(得分:3)
List<MyClass> mainList = new List<MyClass>();
List<MyClass> childList = new List<MyClass>();
foreach (MyClass myClass in childList)
{
int index = mainList.FindIndex(delegate(MyClass item) { return (item.Name==myClass.Name && ; item.Description == myClass.Description);});
mainList[index] = myClass;
}
试试这个。我希望你得到你渴望的结果。
答案 1 :(得分:2)
List<MyClass> originalCollection = new List<MyClass>();
List<MyClass> newStuff = new List<MyClass>();
foreach (var item in newStuff)
{
int index = originalCollection.FindIndex(x => x.Name == item.Name && x.Description == item.Description);
if (index < 0)
continue;
originalCollection[index] = item;
}
如果你真的想要1班......
List<MyClass> originalCollection = new List<MyClass>();
List<MyClass> newStuff = new List<MyClass>();
originalCollection = newStuff.Concat(originalCollection.Where(x => !newStuff.Any(y => y.Description == x.Description && y.Name == x.Name)).ToArray()).ToList();
答案 2 :(得分:2)
这是一种方式:
foreach (var item in collection2.Take(20)) // grab replacement range
{
int index;
if ((index = collection1.FindIndex(x =>
x.Name == item.Name &&
x.Description == item.Description)) > -1)
{
collection1[index] = item;
}
}
collection1.AddRange(collection2.Skip(20)); // append the rest
如果您的意图更加明确,那么代码很可能会得到更多改进。如果能够更好地理解问题,可能会采用更清洁的方式。
答案 3 :(得分:1)
扩展方法的一种方法
public static void Replace(this object[] elements, object oldObject, object newObject) {
var index = elements.IndexOf(oldObject);
if (index > 0) {
elements[index] = newObject;
}}