private void bCompare_Click(object sender, RoutedEventArgs e) { //load directory content WindowsFileSystem fileSystem = new WindowsFileSystem(); IEnumerable <IDirectoryViewItem> leftItems = fileSystem.GetDirectoryContent(LeftDir); List <IDirectoryViewItem> rightItems = fileSystem.GetDirectoryContent(RightDir).ToList();//list need for remove functionality comparisonResult = new List <DirectoryComparison>(); IDirectoryViewItem rightItem; foreach (IDirectoryViewItem item in leftItems) { if (item == null || item.IsMoveUp) { continue; } rightItem = rightItems.SingleOrDefault(dvi => dvi != null && dvi.Name == item.Name);//right item that matches left name if (rightItem != null) { if (item.IsDirectory) { comparisonResult.Add(new DirectoryComparison(item, rightItem, DirectoryComparisonResult.Equal)); } else if (item.LastModifiedTime > rightItem.LastModifiedTime) { comparisonResult.Add(new DirectoryComparison(item, rightItem, DirectoryComparisonResult.LeftNewer)); } else if (item.LastModifiedTime < rightItem.LastModifiedTime) { comparisonResult.Add(new DirectoryComparison(item, rightItem, DirectoryComparisonResult.RightNewer)); } else { comparisonResult.Add(new DirectoryComparison(item, rightItem, DirectoryComparisonResult.Equal)); } rightItems.Remove(rightItem);//no need in futher comparison } else { comparisonResult.Add(new DirectoryComparison(item, null, DirectoryComparisonResult.LeftNewer)); } } //every item from right collection don't exist in left foreach (IDirectoryViewItem item in rightItems) { if (item == null || item.IsMoveUp) { continue; } comparisonResult.Add(new DirectoryComparison(null, item, DirectoryComparisonResult.RightNewer)); } lvCompare.ItemsSource = comparisonResult; }