C# 比较多个列表以包含相同的数据
我有一个属性类型为C# 比较多个列表以包含相同的数据,c#,compare,fileinfo,C#,Compare,Fileinfo,我有一个属性类型为list的机器列表。这是定义 internal class Machine { internal string MachineName { get; set; } internal List<FileInfo> Files { get; set; } internal Machine(string machine) { this.MachineName = machine; this.Files =
list
的机器列表。这是定义
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);
}
}
内部类机器
{
内部字符串MachineName{get;set;}
内部列表文件{get;set;}
内机(串机)
{
this.MachineName=机器;
this.Files=新列表();
}
公共重写字符串ToString()
{
返回string.Format(“Machine-{0}”,this.MachineName);
}
}
代码从我网络上的服务器填充列表,每个服务器都应该有相同版本的相同文件,如果没有,我需要了解它们
如何使用C#实用地比较多个文件
列表(如果有必要,一次最多四个)
如果只需要比较两台机器(例如使用Distinct
),并且我可以将所有列表都比较为一台,那么这将很容易。但是有什么方法可以同时比较所有数据吗?你应该看看
您只需展平文件列表(),按FileInfo
分组,并断言所有组都有n
文件,n
是您正在验证的机器数量:
var areAllIdentical = machines.SelectMany(m => m.Files)
.GroupBy(f => f, myComparer)
.All(g => g.Count() == n);
myComparer
之所以存在,是因为分组时可能需要为FileInfo
实现自己的相等逻辑;默认行为很可能不符合您的要求,现在无法检查它,但我猜它的引用相等
是什么使两个
FileInfo
被认为是相同的?相同的文件名、上次写入日期等。?在自定义中实现这一逻辑,您就可以完成设置。这个问题有点难以回答,因为您不完全清楚要做什么。然而;如果你想比较任何东西的列表,你可以使用linq,但你需要一些东西来比较它。在对比中你到底在寻找什么?你能发送一行代码来显示比较逻辑吗?从那里我相信我可以给你我用来比较列表的逻辑。