首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果DirectoryInfo包含目录

如果DirectoryInfo包含目录
EN

Stack Overflow用户
提问于 2012-10-18 18:15:04
回答 5查看 3K关注 0票数 1

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

代码语言:javascript
复制
DirectoryInfo[] test = dir.GetDirectories();
if(test.Contains(new DirectoryInfo(dir.FullName +"\\"+ "Test_Folder")))
{
    ContainsTestFolder = true;
}

对我来说,这应该可以工作,但它似乎不会在应该返回true的时候返回true。任何我做错了什么的想法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-18 18:19:40

使用Enumerable.Any

代码语言:javascript
复制
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(r => r.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
   ContainsTestFolder = true;
}

没有得到所需结果的原因是,包含比较对象引用,而不是它的值。还可以考虑使用Path.Combine而不是连接路径。

票数 2
EN

Stack Overflow用户

发布于 2012-10-18 18:18:25

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

更喜欢使用谓词,使用FirstOrDefault和比较目录的FullName

如果找到,则FirstOrDefault返回对象;如果未找到,则返回null

代码语言:javascript
复制
DirectoryInfo[] test = dir.GetDirectories();
if (test.FirstOrDefault(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))) != null)
{
   ContainsTestFolder = true;
}

您还可以使用返回boolAny谓词。

代码语言:javascript
复制
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
    ContainsTestFolder = true;
}
票数 3
EN

Stack Overflow用户

发布于 2012-10-18 18:20:06

你不能以这种方式测试它,因为你正在检查两个不同的对象,这两个对象有一个相同的等价性属性。

试一试

代码语言:javascript
复制
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder")))
{
   ContainsTestFolder = true;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12952289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档