public override IPermission Union(IPermission other)
{
FileIOPermission fiop = Cast(other);
if (fiop == null)
{
return(Copy());
}
if (IsUnrestricted() || fiop.IsUnrestricted())
{
return(new FileIOPermission(PermissionState.Unrestricted));
}
if (IsEmpty() && fiop.IsEmpty())
{
return(null);
}
FileIOPermission result = (FileIOPermission)Copy();
result.AllFiles |= fiop.AllFiles;
result.AllLocalFiles |= fiop.AllLocalFiles;
string[] paths = fiop.GetPathList(FileIOPermissionAccess.Read);
if (paths != null)
{
UnionKeys(result.readList, paths);
}
paths = fiop.GetPathList(FileIOPermissionAccess.Write);
if (paths != null)
{
UnionKeys(result.writeList, paths);
}
paths = fiop.GetPathList(FileIOPermissionAccess.Append);
if (paths != null)
{
UnionKeys(result.appendList, paths);
}
paths = fiop.GetPathList(FileIOPermissionAccess.PathDiscovery);
if (paths != null)
{
UnionKeys(result.pathList, paths);
}
return(result);
}