我正在尝试测试以查看DirectoryInfo[]是否包含目录我的代码如下
DirectoryInfo[] test = dir.GetDirectories();
if(test.Contains(new DirectoryInfo(dir.FullName +"\\"+ "Test_Folder")))
{
ContainsTestFolder = true;
}对我来说,这应该可以工作,但它似乎不会在应该返回true的时候返回true。任何我做错了什么的想法。
发布于 2012-10-18 18:19:40
使用Enumerable.Any
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(r => r.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
ContainsTestFolder = true;
}没有得到所需结果的原因是,包含比较对象引用,而不是它的值。还可以考虑使用Path.Combine而不是连接路径。
发布于 2012-10-18 18:18:25
您试图比较两个所有属性都不相等的复杂对象,最好只比较它们的FullName属性。
更喜欢使用谓词,使用FirstOrDefault和比较目录的FullName
如果找到,则FirstOrDefault返回对象;如果未找到,则返回null
DirectoryInfo[] test = dir.GetDirectories();
if (test.FirstOrDefault(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))) != null)
{
ContainsTestFolder = true;
}您还可以使用返回bool的Any谓词。
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
ContainsTestFolder = true;
}发布于 2012-10-18 18:20:06
你不能以这种方式测试它,因为你正在检查两个不同的对象,这两个对象有一个相同的等价性属性。
试一试
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder")))
{
ContainsTestFolder = true;
}https://stackoverflow.com/questions/12952289
复制相似问题