我正在测试以查看 a 是否DirectoryInfo[]
包含我的代码在下面的目录
DirectoryInfo[] test = dir.GetDirectories();
if(test.Contains(new DirectoryInfo(dir.FullName +"\\"+ "Test_Folder")))
{
ContainsTestFolder = true;
}
对我来说,这应该有效,但它似乎并没有在应该的时候返回 true。关于我做错了什么的任何想法。
我正在测试以查看 a 是否DirectoryInfo[]
包含我的代码在下面的目录
DirectoryInfo[] test = dir.GetDirectories();
if(test.Contains(new DirectoryInfo(dir.FullName +"\\"+ "Test_Folder")))
{
ContainsTestFolder = true;
}
对我来说,这应该有效,但它似乎并没有在应该的时候返回 true。关于我做错了什么的任何想法。
您试图比较所有属性不相等的两个复杂对象,更喜欢只比较它们的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;
}
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(r => r.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
ContainsTestFolder = true;
}
您没有得到想要的结果的原因是,包含比较对象引用,而不是它的值。还可以考虑使用Path.Combine而不是连接路径。
您无法以这种方式对其进行测试,因为您正在检查 2 个具有相同属性的不同对象是否相等。
尝试
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder")))
{
ContainsTestFolder = true;
}
您还可以使用 .Contains 如下:
var path = Directory.GetCurrentDirectory();
var ctf = Directory.GetDirectories(path).Contains(Path.Combine(path, "Test_Folder"));
这也完全避免了对 DirectoryInfo 的需要
检查您的目录状态(如果它包含任何子目录)
if(test.length >0) { // Do you coding here }enter code here