c# - 比较两个文件夹的 ACL
问题描述
您如何比较两个不同文件夹的 AuthorizationRuleCollection?我想知道ACL是否相同。
我的解决方案是遍历每个项目并计算 IdentityReference.Value + AccessMask 的哈希值。然后将它们全部汇总并比较每个集合的总数。
有更好的方法吗?
解决方案
我会SequenceEqual
从 LINQ 开始使用AuthorizationRuleCollection
implements IEnumerable
。唯一的问题是它AuthorizationRule
没有覆盖object.Equals()
,这意味着我们需要提供IEqualityComparer<AuthorizationRule>
这样的自定义:
public class AuthorizationRuleEqualityComparer : IEqualityComparer<AuthorizationRule>
{
public static readonly AuthorizationRuleEqualityComparer Instance = new AuthorizationRuleEqualityComparer();
private AuthorizationRuleEqualityComparer()
{
}
public bool Equals(AuthorizationRule l, AuthorizationRule r)
{
// Compare more fields if needed.
return l.IdentityReference == r.IdentityReference;
}
public int GetHashCode(AuthorizationRule rule)
{
return rule.IdentityReference.GetHashCode();
}
}
用法:
AuthorizationRuleCollection arc1;
AuthorizationRuleCollection arc2;
var equal = arc1
.OfType<AuthorizationRule>()
.SequenceEqual(
arc2.OfType<AuthorizationRule>(),
AuthorizationRuleEqualityComparer.Instance);
推荐阅读
- inno-setup - 我在哪里可以找到 VclStylesinno.dll 以便能够在我的 Inno Setup 脚本中使用 VCL 样式?
- function - 有没有办法在 fortran 中隐式定义函数 midprogram'
- javascript - Laravel 与 TinyMCE npm 混合运行生产 - 编译文件“获取”未定义
- lua - 如何使用 lua 脚本中的脚本重新启动 lua 程序
- mule - 如何使用 Mule 4 将传入的 JSON 有效负载写入 pdf 文件
- xcode - Xcode Multiple Commands 错误,无法解决这个问题
- php - 关联表的键
- python - 基于边界范围的 bin 数据
- snowflake-cloud-data-platform - 清除或截断 information_schema.copy_history 表:雪花
- c# - SQL CLR 在 SQL Server 中随机失败