1

我正在测试以查看 a 是否DirectoryInfo[]包含我的代码在下面的目录

DirectoryInfo[] test = dir.GetDirectories();
if(test.Contains(new DirectoryInfo(dir.FullName +"\\"+ "Test_Folder")))
{
    ContainsTestFolder = true;
}

对我来说,这应该有效,但它似乎并没有在应该的时候返回 true。关于我做错了什么的任何想法。

4

5 回答 5

3

您试图比较所有属性不相等的两个复杂对象,更喜欢只比较它们的FullName属性。

更喜欢使用谓词使用FirstOrDefault并比较目录的全名

FirstOrDefault如果找到则返回一个对象,null如果没有找到

DirectoryInfo[] test = dir.GetDirectories();
if (test.FirstOrDefault(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))) != null)
{
   ContainsTestFolder = true;
}

您还可以使用Any返回 a 的谓词bool

DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
    ContainsTestFolder = true;
}
于 2012-10-18T10:18:25.200 回答
2

使用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-18T10:19:39.850 回答
2

您无法以这种方式对其进行测试,因为您正在检查 2 个具有相同属性的不同对象是否相等。

尝试

DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder")))
{
   ContainsTestFolder = true;
}
于 2012-10-18T10:20:06.110 回答
2

您还可以使用 .Contains 如下:

var path = Directory.GetCurrentDirectory();
var ctf = Directory.GetDirectories(path).Contains(Path.Combine(path, "Test_Folder"));

这也完全避免了对 DirectoryInfo 的需要

于 2014-10-24T09:37:47.930 回答
1

检查您的目录状态(如果它包含任何子目录)

if(test.length >0) { // Do you coding here }enter code here
于 2013-03-09T02:53:27.710 回答