Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Fa4stik
7 / 7 / 1
Регистрация: 04.04.2020
Сообщений: 262

Почему код добавляет одинаковые Directory?

26.04.2022, 21:55. Показов 998. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, подскажите пожалуйста почему первый код работает не корректно (добавляет существующие директории), а второй который ищет директории по имени, работает корректно
#1
C#
1
2
3
4
5
6
7
8
9
10
public static List<DirectoryInfo> GetAlbums(List<FileInfo> files)
        {
            var dirInf = new List<DirectoryInfo>();
            foreach (var file in files)
            {
                if ((file.Extension == ".mp3" || file.Extension == ".wav") && !dirInf.Contains(file.Directory))
                    dirInf.Add(file.Directory);
            }
            return dirInf;
        }
#2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static List<DirectoryInfo> GetAlbums(List<FileInfo> files)
        {
            var dirInf = new List<DirectoryInfo>();
            var dirName = new List<string>(); // ?
            foreach (var file in files)
            {
                if ((file.Extension == ".mp3" || file.Extension == ".wav") && !dirName.Contains(file.DirectoryName))
                {
                    dirInf.Add(file.Directory);
                    dirName.Add(file.DirectoryName); // ?
                }
            }
            return dirInf;
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2022, 21:55
Ответы с готовыми решениями:

Почему код генерирует одинаковые IP-адреса?
Здравствуйте Я сделал программу, которая создает рандомный IP, после чего проверяет, существует ли он. Если IP существует, то тогда в...

INSERT добавляет в таблицу две одинаковые строки
DT.Clear() 'Очищаем таблицу SqlCom = New OleDb.OleDbCommand(&quot;INSERT INTO (, , , , ) VALUES ('&quot; &amp; Me.TextBox1.Text &amp; &quot;',...

Алгоритм двоичной кучи не добавляет в кучу одинаковые числа
Метод InsertWithPriority добавляет элемент и восстанавливает основное свойство кучи Метод PeekAtNext возвращает элемент корня дерева ...

2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.04.2022, 23:00
Лучший ответ Сообщение было отмечено Fa4stik как решение

Решение

Цитата Сообщение от Fa4stik Посмотреть сообщение
подскажите пожалуйста почему первый код работает не корректно (добавляет существующие директории), а второй который ищет директории по имени, работает корректно
В классе DirectoryInfo не реализовано сравнение двух экземпляров DirectoryInfo на равенство, следовательно метод Contains сравнивает ссылки.
У каждого экземпляра FileInfo свой экземпляр DirectoryInfo, потому с точки зрения проверки на равенство они все разные.

C#
1
2
3
DirectoryInfo d1 = new(@"C:\");
DirectoryInfo d2 = new(@"C:\");
bool equal = d1.Equals(d2); // False
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
26.04.2022, 23:14
Лучший ответ Сообщение было отмечено Fa4stik как решение

Решение

Fa4stik, - потому что DirectoryInfo это класс без переопределенного метода Equals и потому даже когда у разных FileInfo один и тот же каталог, свойство Directory возвращает разные экземпляры. Вот короткий пример для иллюстрации сути
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Main()
{
    var examples = new List<Example>
    {
        new Example { Name = "abc" }
    };
    var exampleToFind = new Example { Name = "abc" };
    Console.WriteLine(examples.Contains(exampleToFind)); // false
}
 
class Example
{
    public string Name { get; init; }
 
    // Если убрать комментарий, то программа выведет true
    //public override bool Equals(object obj) => Name == ((Example)obj).Name;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2022, 23:14
Помогаю со студенческими работами здесь

Directory Opus: как запретить одинаковые вкладки?
Как в Directory Opus запретить вкладки в листере с одинаковыми путями? Искал в настройках - не нашёл. Мне нужно, чтобы одной папке...

Создать макрос который добавляет поле дата рождения и вписывает туда всем одинаковые значения
Здравствуйте, в универе дали задание на защите лабы. В таблице есть только два поля - номер человека и его Фамилия. Нужно создать макрос...

Почему не добавляет?
procedure TForm39.btn1Click(Sender: TObject); var zap:string; num:string; begin num:=inttostr(form40.tbl1.RecordCount+1); ...

Почему не добавляет?
INSER INTO pages SET title='Администрирование сайта', TitleType='dx', url='/';

Почему не добавляет фрагменты?
Добрый вечер народ. Голову ломаю не могу понять в чем дело. Подскажите плз. Объявил фрагменты private val listMainFragments...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru