gpt4 book ai didi

c# - 如何检查 ObservableCollection 中的重复项?

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:53 40 4
gpt4 key购买 nike

我有一个地址集合,其中有不同的地址项。每个地址项都有 AddressType、City、Zipcode 和其他列。我正在写一个验证,如果有人正在添加一个新的 addressType 并且 Addresses 的集合已经列出了一个 AddressType,那么给出一个警告它已经被列出。我怎样才能做到这一点。我附上了一些代码。现在它只检查它的“工作地址”。我有三种类型的地址。

       if (Addresses.Any
(a => a.AddressType =="Job Address"))
{
DialogManager.ShowMessageBox(("The type has already been listed "),
MessageBoxButton.OKCancel);
}

最佳答案

如果您事后检查它,您可以使用 HashSet<string> 的大小:

var types = new HashSet<string>(Addresses.Select(aa => aa.AddressType));
if (types.Count < Addresses.Count)
{
// You have a duplicate...
// ...not necessarily easy to know WHO is the duplicate
}

以上通过分配每个 AddressType 来工作实例到一个集合。集合是仅包含添加的唯一项的集合。因此,如果您的输入序列中有重复项,则该集合包含的项目将少于您的输入序列。您可以像这样说明这种行为:

// And an ISet<T> of existing items
var types = new HashSet<string>();

foreach (string typeToAdd in Addresses.Select(aa => aa.AddressType))
{
// you can test if typeToAdd is really a new item
// through the return value of ISet<T>.Add:
if (!types.Add(typeToAdd))
{
// ISet<T>.Add returned false, typeToAdd already exists
}
}

更好的方法是事先,也许通过 CanExecute如果您以类似的方式实现了一个命令:

this.AddCommand = new DelegateCommand<Address>(
aa => this.Addresses.Add(aa),
aa => !this.Addresses.Any(xx => xx.AddressType == aa.AddressType));

关于c# - 如何检查 ObservableCollection 中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408207/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com