1

基本上,我想知道我是否可以使用两个 ObservableCollections 来做到这一点:

oldList = newList;

我有两个在我的应用程序中填充的列表,每次填充它们时,我希望“新”值成为“旧”值,然后将一组新值放入“新”列表中。

有那么容易吗?有没有其他方法可以做到这一点,而无需每次都遍历整个 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);
            }
4

2 回答 2

3

如果您使用下面列出的扩展方法,您正在尝试做的事情将成为一个单行:

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());
        }
    }
}
于 2013-02-25T19:12:43.343 回答
0

我想这就是您可能正在寻找的东西?这会将 newList 中的所有内容添加到您的 oldList。

ObservableCollection<YourType> oldList = new ObservableCollection<YourType>(newList);
newList.clear();
//put new stuff in your list here.
于 2013-02-25T19:06:05.550 回答