基本上,我想知道我是否可以使用两个ObservableCollections:
oldList = newList;
我有两个列表通过我的应用程序填充,每次填充时,我希望'new'值成为'旧'值,然后获取一组新的值放入'new 'list。
这很容易吗?有没有其他方法可以做到这一点,而不是每次迭代整个newList?
编辑:这是新列表的填充方式。基本上,我只想将newList的内容放入oldList。
foreach (object obj in ts.GetVariables())
{
if ((obj.ToString() != "_SMSTSReserved2") || (obj.ToString() != "OSDJoinPassword") || (obj.ToString() != "OSDLocalAdminPassword"))
{
TSVar var = new TSVar();
var.TSVarName = obj.ToString();
var.TSVarValue = ts[obj.ToString()];
newList.Add(var);
}
}
oldList.Clear();
foreach (TSVar var in newList)
{
oldList.Add(var);
}
答案 0 :(得分:2)
如果您使用下面列出的扩展方法,那么您尝试做的事情就变成了一个方法:
oldList.Replace(newList);
我会为ObservableCollection创建一个扩展方法,如下所示:
public static class ObservableCollectionExtensionMethods
{
public static void Replace<T>(this ObservableCollection<T> old, ObservableCollection<T> @new)
{
old.Clear();
foreach (var item in @new)
{
old.Add(item);
}
}
}
这就是你如何使用它:
using System.Collections.ObjectModel;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ExtensionMethods
{
[TestClass]
public class ObservableCollectionExtensionMethodsTest
{
[TestMethod]
public void ReplaceTest()
{
// Arrange
var old = new ObservableCollection<string> { "1"};
var @new = new ObservableCollection<string> {"2"};
// Act
old.Replace(@new);
// Assert
Assert.AreEqual("2", old.First());
}
}
}
答案 1 :(得分:0)
我认为您可能正在寻找这个?这会将newList中的所有内容添加到oldList。
ObservableCollection<YourType> oldList = new ObservableCollection<YourType>(newList);
newList.clear();
//put new stuff in your list here.