我正在使用 LINQ ENumerable.except 从 MyType 的两个列表中获取差异。当我找到差异时,我需要检索相应差异项的基本列表和比较列表中的不同之处。喜欢,
我有两个清单要比较
Base:
Name="1",Type="a",Switch="384347324372432"
Name="1",Type="b",Switch="43432432423"
Name="2",Type="q",Switch="4324324234"
Compare List:
Name="1",Type="a",Switch="aAAAA384347324372432"
Name="1",Type="c",Switch="23432432"
Name="2",Type="q",Switch="3423432423432"
Name="2",Type="q",Switch="4324324234"
乌普特将是
Found diff.
Base:
Name="1",Type="a",Switch="384347324372432"
Corresponding compare value:
Name="1",Type="a",Switch="aAAAA384347324372432"
etc...
我已经编写了自己的类对象,例如 MyType 用于将这些存储为项目属性
定义了一个自定义比较器,例如
class mycomparer: System.Collections.Generic.IEqualityComparer<MyType>
{
public mycomparer() {}
public bool Equals(MyType type1, MyType type2)
{
return ( (type1.Name.ToLower() == type2.Name.ToLower()) && (type1.Type.ToLower() == type2.Type.ToLower()) (type1.Switch.ToLower() == type2.Switch.ToLower())
}
public int GetHashCode(MyType type)
{
return string.concat(type.Name, type.Type, type.Switch).ToLower().GetHashCode();
}
}
在我的代码中,我使用
MyComparer mine = new MyComparer();
IEnumerable<MyType> diff = baseList.Except(compareList,mine);
我正确地得到了差异。但是对于baselist中不同的值,我想知道comparelist中对应的值是什么。
我愿意
foreach(Mytype type in diff)
{
Console.writeline(type.Name+type.Type+type.Switch);
}
如何获取比较列表的相应值。
我尝试过类似的东西,
IEnumerable<MyType> compareValue = Comparelist.Where(tempFile => tempFile.Name.ToLower() == type.Name.ToLower() && tempFile.Type.ToLower() == process.Type.ToLower()
(基本上,switch在这里可能会有所不同)
但问题是,在某些情况下,可能存在重复的Name=""Type="",所以上面的where 检索到的项目不止一项,因此对应的comparelist 值会有所不同。
我尝试从 Equal 方法编写差异值,但对我不起作用。
更新:
在发现重复名称和类型并且开关不匹配的情况下,我认为 diff 计算正确,但是当输出写入控制台时,写入的 diff 值不正确,这里是示例。
Base:
Name="2",Type="q",Switch="4324324234"
Name="2",Type="q",Switch="3423432423432"
Compare List:
Name="2",Type="q",Switch="4324324234"
Name="2",Type="q",Switch="3423432423432dwqdwqdwqdqwdwdq"
base.except(compare) (as used in my sample code or Moho's solution) gets the diff correctly,
但使用 diffSwitches.ToList().ForEach
我会得到类似的东西
base: Name="2",Type="q",Switch="3423432423432"
Compare: Name="2",Type="q",Switch="4324324234"
你看那不是对应的不匹配。事实上 Switch="4324324234" 是正确匹配的。这是我看到的问题。
谢谢。