如果您事后对此进行检查,则可以使用 a 的大小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));