#c# #list #linq
Вопрос:
Эй, все, я пытаюсь запросить строковый номер, который находится на первой позиции в моем списке:
Listlt;string[]gt; idMainDescriptionIcon = new Listlt;string[]gt;(){ // [ID] [Main] [Description] "XX[d=day or n=night]" new string[4] { "200", "Thunderstorm", "thunderstorm with light rain", "11" }, new string[4] { "201", "Thunderstorm", "thunderstorm with rain", "11" }, new string[4] { "202", "Thunderstorm", "thunderstorm with heavy rain", "11" }, new string[4] { "210", "Thunderstorm", "light thunderstorm", "11" }, new string[4] { "211", "Thunderstorm", "thunderstorm", "11" } };
И Linq, который я использую:
Listlt;stringgt; d = idMainDescriptionIcon[0][0] .Where(x =gt; x.StartsWith("202")) .Select(x =gt; x) .ToList();
Я получаю ошибку в idMainDescriptionIcon[0][0]
заявлении:
Ошибка CS1061 «char» не содержит определения для «StartsWith», и не удалось найти доступный метод расширения «StartsWith», принимающий первый аргумент типа «char» (у вас отсутствует директива using или ссылка на сборку?)
Буква D должна иметь значения "202", "Thunderstorm", "thunderstorm with heavy rain", "11"
.
И вот тут-то я и застрял. Не знаете, как исправить эту ошибку?
ОБНОВЛЕНИЕ № 1
При удалении [0][0] и замене его только одним [0] это возврат, который я получаю:
Комментарии:
1.
idMainDescriptionIcon[0][0]
получил слишком много [0].2. Спасибо за ответ @Jawad. Я обновил свою операцию, чтобы показать, что я получаю, когда использую только один [0] вместо [0][0].
Ответ №1:
Проблема здесь idMainDescriptionIcon[0][0]
в том , что здесь имеется в виду одна строка. Повторение этого будет повторением символов в строке, поэтому вы получите ошибку 'char' does not contain a definition for 'StartsWith'
Что вам понадобится, так это следующее
var d = idMainDescriptionIcon .Where(x =gt; x[0].StartsWith("202")) .SelectMany(x =gt; x) .ToList();
Вам нужно запросить весь idMainDescriptionIcon
массив таким образом, чтобы первый элемент внутреннего массива начинался с «202».
Альтернативно,
var d = idMainDescriptionIcon .FirstOrDefault(x =gt; x[0].StartsWith("202")) .ToList();
Выход
Комментарии:
1. Это сделало свое дело, Ану! Теперь все работает так, как должно быть 🙂
2. Возможно , вы также были правы в том
SelectMany()
, что оператору требуется непосредственно набор строк, хотя это несколько необычный способ запроса данных.3. @JoelCoehoorn Есть ли какая-то особая причина для предпочтения
x[0]
First()
в вашем редактировании?4. Комбинация
StartsWith()
вWhere()
сочетании сSelectMany()
может привести к неожиданному выходу в зависимости от того, что пытается @StealthRT. ЗаменаWhere()
наFirstOrDefault()
может быть лучше.5. @Corey Готово, спасибо за предложение