/// <summary>Creates a permission that is the union of the current permission and the specified permission.</summary>
/// <returns>A new permission that represents the union of the current permission and the specified permission.</returns>
/// <param name="target">A permission to combine with the current permission. It must be of the same type as the current permission. </param>
/// <exception cref="T:System.ArgumentException">
/// <paramref name="target" /> is not null and does not specify a permission of the same type as the current permission. </exception>
public override IPermission Union(IPermission target)
{
KeyContainerPermission keyContainerPermission = this.Cast(target);
if (keyContainerPermission == null)
{
return(this.Copy());
}
KeyContainerPermissionAccessEntryCollection keyContainerPermissionAccessEntryCollection = new KeyContainerPermissionAccessEntryCollection();
foreach (KeyContainerPermissionAccessEntry accessEntry in this._accessEntries)
{
keyContainerPermissionAccessEntryCollection.Add(accessEntry);
}
foreach (KeyContainerPermissionAccessEntry accessEntry2 in keyContainerPermission._accessEntries)
{
if (this._accessEntries.IndexOf(accessEntry2) == -1)
{
keyContainerPermissionAccessEntryCollection.Add(accessEntry2);
}
}
if (keyContainerPermissionAccessEntryCollection.Count == 0)
{
return(new KeyContainerPermission(this._flags | keyContainerPermission._flags));
}
KeyContainerPermissionAccessEntry[] array = new KeyContainerPermissionAccessEntry[keyContainerPermissionAccessEntryCollection.Count];
keyContainerPermissionAccessEntryCollection.CopyTo(array, 0);
return(new KeyContainerPermission(this._flags | keyContainerPermission._flags, array));
}