2

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

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

2 回答 2

1

创建一个实现IEqualityComparer接口的新AddressComparer

现在你使用Contains方法

if(Addresses.Contains(Address,new AddressComparer()))
{
      //your code
}
于 2013-08-23T17:10:27.853 回答
1

如果您事后对此进行检查,则可以使用 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));
于 2013-08-23T17:13:50.580 回答