C# 如何确定两个列表是否<;FileInfo>;是否使用MSTest包含相同的元素?
我试图找出如何确定两个C# 如何确定两个列表是否<;FileInfo>;是否使用MSTest包含相同的元素?,c#,unit-testing,mstest,C#,Unit Testing,Mstest,我试图找出如何确定两个列表何时不同。为什么MSTest告诉我这两个与CollectionAssert.Areequality或SequenceEqual不同 测试失败,原因是:CollectionAssert.Areequality失败。预期的集合包含1次出现的。实际集合包含0个事件。 string basePath=Path.Combine(Environment.GetEnvironmentVariable(“windir”), @“Microsoft.NET\Framework\v3.0\
列表
何时不同。为什么MSTest告诉我这两个与CollectionAssert.Areequality
或SequenceEqual
不同
测试失败,原因是:CollectionAssert.Areequality失败。预期的集合包含1次出现的。实际集合包含0个事件。
string basePath=Path.Combine(Environment.GetEnvironmentVariable(“windir”),
@“Microsoft.NET\Framework\v3.0\WPF”);
var fiList1=新列表{new FileInfo(Path.Combine(basePath,“PenIMC.dll”)};
var fiList2=新列表{new FileInfo(Path.Combine(basePath,“PenIMC.dll”)};
征收资产等价物(文件1、文件2)//为什么会失败?
//还有这个。。。
Assert.IsTrue(fiList1.SequenceEqual(fiList2));
我可以使用类似的简单类型,例如
int
,但不能使用我的列表。如果您不能仅仅通过查看上面的代码来确定这一点,那么可以提供一种聪明的方法来研究这一点——比如将对象序列化为XML,然后我可以将它们区分开来。我猜我遗漏了一些东西。我相信这与引用相等有关。如果将newfileinfo
存储在同一个变量中,则此操作有效。因此,您必须使用一个覆盖Equals
方法的复杂类型,因此只需创建我自己的比较器类型来覆盖eqauls,如下所示?:如果它不是您可以覆盖的内容,则似乎是这样。我想,如果CollectionAssert的描述是这样的话,我不会想到这一点。Areequality。。。如果元素的值相等,则元素相等,而不是引用同一对象
string basePath = Path.Combine(Environment.GetEnvironmentVariable("windir"),
@"Microsoft.NET\Framework\v3.0\WPF");
var fiList1 = new List<FileInfo> { new FileInfo(Path.Combine(basePath, "PenIMC.dll")) };
var fiList2 = new List<FileInfo> { new FileInfo(Path.Combine(basePath, "PenIMC.dll"))};
CollectionAssert.AreEquivalent(fiList1, fiList2); //why is this failing?
//And this one too...
Assert.IsTrue(fiList1.SequenceEqual(fiList2));