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);
}