У меня есть lsit типа List<KeyValuePair<byte[], string>> fileHashList = new List<KeyValuePair<byte[], string>>();
foreach (string entry in results)
{
FileInfo fileInfo = new FileInfo(Path.Combine("DirectoryPath"), entry));
using (var md5 = MD5.Create())
{
using (var stream = File.OpenRead(fileInfo.FullName))
{
var hash = md5.ComputeHash(stream);
fileHashList.Add(new KeyValuePair<byte[], string>(hash, fileInfo.FullName));
}
}
}
Мне нужно найти все повторяющиеся ключи в этом списке.
Я пробовал это, но в моем случае не работает, Я получаю "Enumeration yielded no results"
, хотя у меня такие же ключи!
Сообщите мне, если нужны дополнительные данные Спасибо
GroupBy
использует компаратор по умолчанию и для массива байтов, который бесполезен, поскольку сравнивает хэш объекта, который отличается для массивов с одинаковым содержимым. См. дубликат. Почему в любом случае у вас в качестве ключа используется байтовый массив? - person CodeCaster   schedule 24.09.2020.GroupBy(k => k.Key, StructuralComparisons.StructuralEqualityComparer)
. - person CodeCaster   schedule 24.09.2020GetHashCode()
или достаточно просто переопределить методEquals()
? Также причина, по которой я использую массив байтов в качестве ключа, потому что это хэш-код, и я хочу проверить, совпадают ли несколько файлов или нет. - person m_beta   schedule 24.09.2020cannot convert from 'System.Collections.IEqualityComparer' to 'System.Collections.Generic.IEqualityComparer<byte[]>'
- person m_beta   schedule 24.09.2020Key
является ключом, а его значения (перечисляемые) - элементами, имеющими один и тот же ключ. Так что-то вродеforeach (var d in duplicates) { var filesWithSameHash = d.ToList(); }
. - person CodeCaster   schedule 24.09.2020