Я хочу сравнить два объекта IEnumerable<>
и вернуть новый объект IEnumerable<>
.
Ниже мой код, где у меня есть объект newFiles
, а затем - объект OriginalFiles
. Я хочу сравнить эти два объекта IEnumerable<>
и найти те файлы, которые являются новыми файлами, а также имеют измененные файлы.
FileConfig
класс имеет md5Hash
значение каждого файла в виде строки, поэтому я могу сравнить OriginalFiles
и newFiles
в строке md5Hash
, чтобы выяснить, какие файлы были изменены, а затем создать новый объект IEnumerable<FileConfig>
с этими измененными файлами + новыми файлами.
Например: если у объекта newFiles
всего 10 файлов, а у OriginalFiles
8 файлов, это означает, что в нем есть два новых файла. И затем оставшиеся 8 я сравню и посмотрю, какие файлы были изменены, используя строку md5Hash
, поэтому, если 5 файлов изменились из 8 и было два новых файла, итого я верну 7 файлов как объект IEnumerable<FileConfig>
.
public class ProcessFile
{
public IEnumerable<FileConfig> OriginalFiles { get; set; }
public IEnumerable<FileConfig> GetNewFiles(IEnumerable<FileConfig> newFiles)
{
// compare OriginalFiles and newFiles object and return a new IEnumerable<FileConfig> object
// which has only those files which are modified or new by comparing on md5Hash string
foreach (var element1 in newFiles)
{
var newFileName = element1.Name;
var newMd5Hash = element1.MD5Hash;
foreach (var element2 in this.OriginalFiles)
{
var originalFileName = element2.Name;
var originalmd5Hash = element2.MD5Hash;
if (newFileName.Equals(originalFileName, StringComparison.InvariantCultureIgnoreCase) && !newMd5Hash.Equals(originalmd5Hash, StringComparison.InvariantCultureIgnoreCase))
{
yield return new FileConfig
{
Name = newFileName,
Timestamp = element1.Timestamp,
MD5Hash = newMd5Hash
};
}
}
}
}
}
public class FileConfig
{
public string Name { get; set; }
public DateTime Timestamp { get; set; }
public string MD5Hash { get; set; }
}
Я могу запустить два цикла for и сравнить каждый файл в своей строке md5Hash
и выяснить, какие файлы были изменены, и вернуть новый объект IEnumerable<FileConfig>
, но есть ли какой-либо ярлык, который может легко сделать то же самое или любой другой способ лучше в C#?