Метод `IndexOf` предназначен для поиска индекса первого вхождения указанного элемента в коллекции. Рассмотрим, как этот метод работает в различных типах коллекций в C#. ### List\<T\> Сигнатуры: ```csharp public int IndexOf(T item); public int IndexOf(T item, int index); public int IndexOf(T item, int index, int count); ``` Пример: ```csharp List<string> words = new List<string> { "apple", "banana", "cherry" }; int index = words.IndexOf("banana"); // Возвращает 1 ``` - Производительность: O(n) в худшем случае, так как нужно пройти по всему списку для поиска. Пример 2: ```csharp List<string> fruits = new List<string> { "apple", "banana", "cherry", "apple", "date", "banana" }; // Начинаем поиск с индекса 1 и проверяем следующие 4 элемента. int index = fruits.IndexOf("banana", 1, 4); // Выводит 1, потому что "banana" находится на индексе 1 в заданном диапазоне. Console.WriteLine(index); ``` В этом примере поиск начинается с элемента, расположенного на индексе 1, и продолжается вплоть до 4 следующих элементов (то есть до индекса 4 включительно). Первое вхождение "banana" найдено на индексе 1 в заданном диапазоне. ### Array Сигнатуры: ```csharp public static int IndexOf(Array array, Object value); public static int IndexOf(Array array, Object value, int startIndex); public static int IndexOf(Array array, Object value, int startIndex, int count); ``` Пример: ```csharp string[] words = { "apple", "banana", "cherry" }; int index = Array.IndexOf(words, "banana"); // Возвращает 1 ``` - Производительность: Также O(n) в худшем случае. ### HashSet\<T\> `HashSet<T>` не поддерживает метод `IndexOf`, так как он представляет неупорядоченную коллекцию. Однако, у `HashSet<T>` есть метод `Contains`. - Производительность: O(1) в большинстве случаев. ### Dictionary<TKey, TValue> Словари не поддерживают `IndexOf`. Но можно использовать `ContainsKey` или `ContainsValue`. - Производительность: O(1) для `ContainsKey`, O(n) для `ContainsValue`.