public override int GetHashCode() { if (!hashValue.HasValue) { uint size = Shell32.ILGetSize(Pidl); if (size != 0) { byte[] pidlData = new byte[size]; Marshal.Copy(Pidl, pidlData, 0, (int)size); byte[] hashData = ShellItem.hashProvider.ComputeHash(pidlData); hashValue = BitConverter.ToInt32(hashData, 0); } else { hashValue = 0; } } return(hashValue.Value); }