比较多个列表以包含相同的数据



我有一个属性类型为 List<FileInfo> 的机器列表。这是定义。

internal class Machine
{
    internal string MachineName { get; set; }
    internal List<FileInfo> Files { get; set; }
    internal Machine(string machine)
    {
        this.MachineName = machine;
        this.Files = new List<FileInfo>();
    }
    public override string ToString()
    {
        return string.Format("Machine - {0}", this.MachineName);
    }
}

代码从我网络上的服务器填充列表,每个服务器都应该有相同版本的相同文件,如果没有,我需要了解它们。

如何使用 C# 实际比较多个Files列表(如果重要的话,一次最多四个)?

如果只有两台机器可以比较(例如使用 Distinct),这将很容易,事实上我可以将所有列表与一台进行比较。但是有没有办法同时比较所有内容?

你应该

看看Enumerable.GroupBy

您需要做的就是平展文件列表 ( SelectMany ),按FileInfo分组并断言所有组都有n文件,n您正在验证的计算机数量:

var areAllIdentical = machines.SelectMany(m => m.Files)
                              .GroupBy(f => f, myComparer)
                              .All(g => g.Count() == n);

myComparer之所以存在,是因为您可能需要在分组时实现自己的相等逻辑以进行FileInfo;默认行为很可能不符合您的要求,现在无法检查出来,但我的猜测是它的引用相等性。

是什么让两个FileInfo被认为是相同的?相同的文件名、上次写入日期等?在自定义IEqualityComparer<FileInfo>中实现该逻辑,即可设置。

相关内容

  • 没有找到相关文章

最新更新