public override IPermission Union(IPermission target)
{
if (target == null)
{
return(this.Copy());
}
if (!VerifyType(target))
{
throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", this.GetType().FullName));
}
KeyContainerPermission operand = (KeyContainerPermission)target;
if (this.IsUnrestricted() || operand.IsUnrestricted())
{
return(new KeyContainerPermission(PermissionState.Unrestricted));
}
KeyContainerPermissionFlags flags_union = (KeyContainerPermissionFlags)(m_flags | operand.m_flags);
KeyContainerPermission cp = new KeyContainerPermission(flags_union);
foreach (KeyContainerPermissionAccessEntry accessEntry in AccessEntries)
{
cp.AddAccessEntryAndUnion(accessEntry, operand);
}
foreach (KeyContainerPermissionAccessEntry accessEntry in operand.AccessEntries)
{
cp.AddAccessEntryAndUnion(accessEntry, this);
}
return(cp.IsEmpty() ? null : cp);
}