Я надеюсь, что смогу обойтись, но я не могу, хоть убей, понять, почему этот код работает некорректно и позволяет добавлять повторяющиеся записи в список.
Условие оператора if
никогда не выполняется, даже когда я перетаскиваю идентичные файлы из одного и того же места. Я не понимаю, почему метод "Содержит" их не соответствует.
public class Form1:Form {
private List<FileInfo> dragDropFiles = new List<FileInfo>();
private void Form1_DragDrop(object sender, DragEventArgs e) {
try {
if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
string[] files =
(string[])e.Data.GetData(DataFormats.FileDrop);
OutputDragDrop(files);
}
}
catch { }
}
private void Form1_DragEnter(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void OutputDragDrop(string[] files) {
try {
foreach (string file in files) {
FileInfo fileInfo = new FileInfo(file);
if (dragDropFiles.Contains(fileInfo)) {
dragDropFiles.Remove(fileInfo);
}
dragDropFiles.Add(fileInfo);
}
PopulateContextMenu();
}
catch { }
}
}
Мне показалось, что я нашел другой способ добиться этого с помощью "Distinct"
Однако, похоже, checkedDragDropFiles
и dragDropFiles
содержат такое же количество записей, включая дубликаты. , за исключением случаев, когда dragDropFiles
отображается в ListBox
, он их не отображает. Почему это происходит?
Мне нужно предотвратить дублирование записей в списке, так как я буду программно создавать меню на основе данных списка.
private void OutputDragDrop(string[] files)
{
try
{
foreach (string file in files)
{
FileInfo fileInfo = new FileInfo(file);
//if (dragDropFiles.Contains(fileInfo))
//{
// dragDropFiles.Remove(fileInfo);
//}
dragDropFiles.Add(fileInfo);
}
List<FileInfo> checkedDragDropFiles = dragDropFiles.Distinct().ToList();
debugList.DataSource = checkedDragDropFiles;
debugList2.DataSource = dragDropFiles;
//PopulateContextMenu();
}
catch { }
}