首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# DirectoryInfo和Except

c# DirectoryInfo和Except
EN

Stack Overflow用户
提问于 2014-04-10 07:57:56
回答 2查看 180关注 0票数 2

我执行以下代码,结果令我费解

代码语言:javascript
复制
System.IO.DirectoryInfo rootDir = 
      new System.IO.DirectoryInfo(@"\\share\data");

// AllDir  == 10 folders

System.IO.DirectoryInfo[] AllDir = 
      rootDir.GetDirectories("*.*", SearchOption.AllDirectories);

// JackDir  == 2 folders

System.IO.DirectoryInfo[] JackDir = 
      rootDir.GetDirectories("Jack*.*", SearchOption.AllDirectories);

// MaryDir == 3 folders

System.IO.DirectoryInfo[] MaryDir = 
      rootDir.GetDirectories("Mary*.*", SearchOption.AllDirectories);

System.IO.DirectoryInfo[] otherDirectory = 
      AllDir.Except<DirectoryInfo>(MaryDir).Except(JackDir).ToArray();

otherDirectory到底还有10 folders...why不是5?我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-10 08:03:02

您正在比较DirectoryInfo实例。它们与对GetDirectories的不同调用返回的不一样。

您可以为DirectoryInfo比较FullName定义自己的比较器,并在调用Except时使用它。

代码语言:javascript
复制
public class DirectoryInfoComparer : IEqualityComparer<System.IO.DirectoryInfo>
{
  public bool Equals(System.IO.DirectoryInfo x, System.IO.DirectoryInfo y)
  {
    if (object.ReferenceEquals(x, y))
      return true;
    if (x == null || y == null)
      return false;
    return x.FullName == y.FullName;
  }

  public int GetHashCode(System.IO.DirectoryInfo obj)
  {
    if (obj == null)
      return 0;
    return obj.FullName.GetHashCode();
  }
}


System.IO.DirectoryInfo[] otherDirectory = 
      AllDir.Except<DirectoryInfo>(MaryDir, new DirectoryInfoComparer()).Except(JackDir, new DirectoryInfoComparer()).ToArray();
票数 3
EN

Stack Overflow用户

发布于 2014-04-10 08:03:14

您需要提供一个自定义比较器,您可以看到这种行为,因为它被测试为与“引用比较”相等,当然它们是不同的引用。

使用除方法过载外,该方法以IEqualityComparer为参数来实现所需的输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22982042

复制
相关文章

相似问题

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