Предотвращение дублирования записей в списке

Я надеюсь, что смогу обойтись, но я не могу, хоть убей, понять, почему этот код работает некорректно и позволяет добавлять повторяющиеся записи в список.

Условие оператора 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 { }
}
11
задан Cody Gray 29 June 2016 в 18:12
поделиться