public override IPermission Union(IPermission target)
{
KeyContainerPermission kcp = Cast(target);
if (kcp == null)
{
return(Copy());
}
KeyContainerPermissionAccessEntryCollection kcpaec = new KeyContainerPermissionAccessEntryCollection();
// copy first group
foreach (KeyContainerPermissionAccessEntry kcpae in _accessEntries)
{
kcpaec.Add(kcpae);
}
// copy second group...
foreach (KeyContainerPermissionAccessEntry kcpae in kcp._accessEntries)
{
// ... but only if not present in first group
if (_accessEntries.IndexOf(kcpae) == -1)
{
kcpaec.Add(kcpae);
}
}
if (kcpaec.Count == 0)
{
return(new KeyContainerPermission((_flags | kcp._flags)));
}
KeyContainerPermissionAccessEntry[] list = new KeyContainerPermissionAccessEntry [kcpaec.Count];
kcpaec.CopyTo(list, 0);
return(new KeyContainerPermission((_flags | kcp._flags), list));
}