У меня есть этот массив строк:
string[] stringArray = { "text1", "text2", "text3", "text4" };
string value = "text3";
Я хотел бы определить, stringArray
содержит ли value
. Если это так, я хочу найти свою позицию в массиве.
Я не хочу использовать петли. Кто-нибудь может подсказать, как мне это сделать?
Array.IndexOf
забота о капитализации? Ли"text1" == "TEXT1"
?Array.IndexOf
возвращает−1
только если индекс ограничен 0 Этот случай сломается, так что будьте осторожны!var a = Array.CreateInstance(typeof(int),new int[] { 2 }, new int[] { 1 }); a.SetValue(1, 1); Console.WriteLine(Array.IndexOf(a, 26)); // 0
источник
Мы также можем использовать
Exists
:источник
char
не может быть преобразовано вSystem.Predicate<char>
РЕДАКТИРОВАТЬ: Я не заметил, что вам также нужна должность. Вы не можете
IndexOf
напрямую использовать значение типа массива, потому что оно реализовано явно. Тем не менее, вы можете использовать:(Это похоже на вызов
Array.IndexOf
согласно ответу Дарина - просто альтернативный подход. Мне не ясно, почему это реализовано явно в массивах, но не берите в голову ...)IList<T>.IndexOf
источник
if (months.Contains(model.Month))
Вы можете использовать
Array.IndexOf()
- обратите внимание, что он вернет -1, если элемент не был найден, и вы должны обработать этот случай.источник
вы можете попробовать вот так ... вы можете использовать Array.IndexOf (), если вы хотите знать позицию также
источник
IMO лучший способ проверить, содержит ли массив заданное значение, это использовать
System.Collections.Generic.IList<T>.Contains(T item)
метод следующим образом:Полный пример кода:
T[]
Массивы в частном порядке реализуют несколько методовList<T>
, таких как Count и Contains. Поскольку это явная (частная) реализация, вы не сможете использовать эти методы без предварительного приведения массива. Это работает не только для строк - вы можете использовать этот трюк, чтобы проверить, содержит ли массив любого типа какой-либо элемент, при условии, что класс элемента реализует IComparable.Имейте в виду, что не все
IList<T>
методы работают таким образом. Попытка использоватьIList<T>
метод Add для массива потерпит неудачу.источник
Вы можете попробовать это, он ищет индекс, содержащий этот элемент, и устанавливает номер индекса как int, затем проверяет, больше ли int, чем -1, поэтому, если он равен 0 или больше, значит, он нашел такой индекс - так как массивы основаны на 0.
источник
источник
Я создал метод расширения для повторного использования.
Как это назвать:
источник
position
что ОП требует?источник
Самый простой и короткий способ будет следующим.
источник
Contains
метода у вас нет этой информации