C# System.IO.FileInfo.Equals()未在Where LINQ扩展方法中返回预期结果
当尝试从指定文件所在的同一目录返回所有其他文件时,返回的文件包括指定文件。假设我的网络上的服务器共享中有三个文件:C# System.IO.FileInfo.Equals()未在Where LINQ扩展方法中返回预期结果,c#,.net,system.io.fileinfo,C#,.net,System.io.fileinfo,当尝试从指定文件所在的同一目录返回所有其他文件时,返回的文件包括指定文件。假设我的网络上的服务器共享中有三个文件: \\Server\Share\Path\To\file1.ext \\Server\Share\Path\To\file2.ext \\Server\Share\Path\To\file3.ext 当我尝试使用FileInfo对象上的.Equals()方法筛选出file2时,该文件仍被包括在内 FileInfo theFile = new FileInfo(@"\\Server
\\Server\Share\Path\To\file1.ext
\\Server\Share\Path\To\file2.ext
\\Server\Share\Path\To\file3.ext
FileInfo
对象上的.Equals()
方法筛选出file2时,该文件仍被包括在内
FileInfo theFile = new FileInfo(@"\\Server\Share\Path\To\file2.ext");
List<FileInfo> allOtherFilesList = theFile.Directory.EnumerateFiles("*").Where(f => !f.Equals(vidFile)).ToList();
//Returned files:
\\Server\Share\Path\To\file1.ext
\\Server\Share\Path\To\file2.ext
\\Server\Share\Path\To\file3.ext
当然,
.Equals()
方法的某些方面我还不了解?我本以为代表同一文件的两个FileInfo
对象是相同的。您是否有时间检查FileInfo
是否有Equals
方法?@AlexeiLevenkov-.Equals()
方法是所有.NET对象继承自的对象类型的基本方法。@cfʀᴎᴅᴏƞвєнᴎ这并不意味着类重写等于。我认为基本版本只是引用了equals。正如@Zer0所提到的,FileInfo不会覆盖equals
。结果是正确的,这是两个不同的对象,只是指向同一个文件。
FileInfo theFile = new FileInfo(@"\\Server\Share\Path\To\file2.ext");
List<FileInfo> allOtherFilesList = theFile.Directory.EnumerateFiles("*").Where(f => !f.FullName.Equals(vidFile.FullName)).ToList();
//Returned files:
\\Server\Share\Path\To\file1.ext
\\Server\Share\Path\To\file3.ext