我有一个地址集合,它有不同的地址项。每个地址项都有AddressType,City,Zipcode和其他列。我正在编写一个验证,如果有人正在添加一个新的addressType并且Addressses集合已经列出了AddressType,那么请发出已经列出的警告。我怎样才能做到这一点。我附上了一些代码。现在它只检查它的“工作地址”。我有三种类型的地址。
if (Addresses.Any
(a => a.AddressType =="Job Address"))
{
DialogManager.ShowMessageBox(("The type has already been listed "),
MessageBoxButton.OKCancel);
}
答案 0 :(得分:1)
创建一个新的AddressComparer
类,实现IEqualityComparer接口
现在使用Contains方法
if(Addresses.Contains(Address,new AddressComparer()))
{
//your code
}
答案 1 :(得分:1)
如果您在事后检查此内容,则可以使用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));