IEqualityComparer not working as intended

后端 未结 3 1853
梦毁少年i
梦毁少年i 2021-01-11 15:01

I have a List of paths of files stored on my computer. My aim is to first filter out the files which have the same name and and then filter out those which have

3条回答
  •  囚心锁ツ
    2021-01-11 15:20

    The hash code is used before Equals is ever called. Since your code gives different hash codes for items that are equal, you're not getting the desired result. Instead, you have to make sure the hash code returned is equal when the items are equal, so for example:

    public class CustomTextComparer : IEqualityComparer
    {
        public bool Equals(string x, string y)
        {
            if (Path.GetFileName(x) == Path.GetFileName(y))
            {
                return true;
            }
            return false; 
        }
        public int GetHashCode(string obj)
        {
            return Path.GetFileName(obj).GetHashCode();
        }
    }
    

    However, as Piotr pointed out, this isn't exactly a good way to go about your goal, since you're going to be doing a lot of Path.GetFileName and new FileInfo respectively, which is a going to be a significant performance hit, especially since you're dealing with the file system, which is not exactly known for its speed of response.

提交回复
热议问题