Как я могу выполнять проверки списков в С#?
Введение в списки С#
Ответ 1
A List Consrehension - это тип набора нотации, в котором программист может описать свойства, которые должны соответствовать членам набора. Он обычно используется для создания набора, основанного на других, уже существующих, наборах или наборах, путем применения какого-либо типа комбинации, преобразования или сокращения к существующим наборам.
Рассмотрим следующую проблему: у вас есть последовательность из 10 чисел от 0 до 9, и вам нужно извлечь все четные числа из этой последовательности. На языке, таком как версия С# версии 1.1, вы были в значительной степени ограничены следующим кодом для решения этой проблемы:
ArrayList evens = new ArrayList();
ArrayList numbers = Range(10);
int size = numbers.Count;
int i = 0;
while (i < size)
{
if (i % 2 == 0)
{
evens.Add(i);
}
i++;
}
В приведенном выше коде не показана реализация функции Range, которая доступна в списке полного кода ниже. С появлением С# 3.0 и .NET Framework 3.5 в CY-программировании теперь доступна нотация на основе списка, основанная на Linq. Вышеупомянутый код С# 1.1 можно портировать на С# 3.0 следующим образом:
IEnumerable<int> numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;
И, с технической точки зрения, вышеприведенный код С# 3.0 можно записать как однострочный, переместив вызов на Enumarable. Перейдите к выражению Linq, которое генерирует последовательность evens. В С# List Consrehension я уменьшаю заданные числа, применяя функцию (по модулю 2) к этой последовательности. Это создает последовательность эвенов намного более кратким образом и не допускает использования синтаксиса цикла. Теперь вы можете спросить себя: это чисто синтаксический сахар? Я не знаю, но я определенно исследую и, возможно, даже задаю вопрос сам. Я подозреваю, что это не просто синтаксический сахар, а некоторые истинные оптимизации, которые можно сделать, используя базовые монады.
Полный список кодов доступен здесь.
Ответ 2
Обнаружено это, когда я искал, как сделать список в С#...
Когда кто-то говорит о понимании списков, я сразу думаю о Python. В приведенном ниже коде создается список, который выглядит следующим образом:
[0,2,4,6,8,10,12,14,16,18]
Путь Python выглядит следующим образом:
list = [2*number for number in range(0,10)]
В С#:
var list2 = from number in Enumerable.Range(0, 10) select 2*number;
Оба метода оцениваются лениво.
Ответ 3
@Ian P
return (from user in users
where user.Valid
select user.Name).ToArray();
Ответ 4
Вы можете использовать LINQ для создания выражений, похожих на списки. Здесь сайт объясняет это немного:
Ответ 5
Хотя это не учебник, вот какой-то код, который иллюстрирует концепцию:
public List<string> ValidUsers(List<User> users) {
List<string> names = new List<string>();
foreach(User user in users) {
if(user.Valid) {
names.Add(user.Name);
}
}
return names;
}