C# Создание списка, который принимает вводимые пользователем данные и после печатает номер из списка в определенном диапазоне значений.(пожалуйста, объясните, как и почему это работает)

#c# #list #integer #filtering

Вопрос:

 using System;
using System.Collections.Generic;
namespace exercise_69
{
  class Program
  {
    public static void Main(string[] args)
     {
  
 
   List<int> numbers = new List<int>();
      //creating a list called numbers
    while (true)
      {
     int input = Convert.ToInt32(Console.ReadLine());
     if (input == -1)
        {
      break;
        }
    numbers.Add(input);
      }
    //fills a list called numbers until user enters " -1 "
  
    Console.WriteLine("from where");
    int lownum = Convert.ToInt32(Console.ReadLine());
      //lowest number to get printed
    Console.WriteLine("where to");
    int highnum = Convert.ToInt32(Console.ReadLine());
     //highest number to get printed 

    foreach(int number in numbers)
      {
       if(lownum < number || highnum > number)
       {
         Console.WriteLine(numbers);
       }  //trying to filter the numbers and print them 
          
              

      }          
    }
  }
} 
  
 

Блок-цитата

проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю программу, консоль просто сообщает мне об этой «Системе.Коллекции.Generic.List`1[System.Int32]» итак, мой вопрос в том, как правильно фильтровать или удалять числа из списка в пределах определенного значения ( не индекса )

Комментарии:

1. Когда вы говорите «удалить из списка», действительно ли вы хотите удалить (удалить, выбросить, навсегда уничтожить) или вы хотите просто притвориться, что их нет для какой-то операции (применить фильтр), только чтобы они снова появились для какой-то другой операции (применить другой фильтр) ?

2. Отступы и ограничение дополнительных пробелов (например, дополнительные последовательные пустые строки) очень важны для удобства чтения.

3. удалите целые числа из списка, которые не входят в диапазон значений, который я ввел ( если я ввел 3 и 7, он должен удалить все целые числа до 3 и более 7), а затем распечатайте список с оставшимися числами

Ответ №1:

консоль просто сообщает мне об этой «Системе.Коллекции.Общий список`1[System.Int32]»

Это потому, что ты сделал это:

 Console.WriteLine(numbers);
 

numbers это List<int> , это целая коллекция чисел, а не просто одно число. Console.WriteLine имеет множество вариаций («перегрузок»), которые знают, как делать самые разные вещи. У него есть большое количество конкретных вариантов для чисел, строк и т. Д., И есть один вариант, который похож на «всеохватывающий»-он принимает object , что означает, что он может принимать практически все во вселенной C#. Единственное, что он делает с этим, если вам удастся использовать этот вариант (перегрузка), — это вызывает ToString() все, что вы передали, а затем печатает строку, которую он возвращает.

Потому что вы сдали List<int> экзамен, и консоль.Линия записи не имеет никаких изменений, которые конкретно делают что-то классное со списком, это означает, что ваш переданный список обрабатывается универсальной версией линии записи; «вызовите строку для того, что было передано, и распечатайте результат». Поскольку у списка нет ничего особенного или интересного ToString() , он просто наследует версию ToString() from object , самый простой корень из всех вещей в C#. Функция toString() объекта не делает очень многого — она просто возвращает тип объекта, который в данном случае является «Системой.Коллекции.Generic.List`1[System.Int32]».. и именно поэтому вы видите то, что видите в консоли

Теперь, когда вы знаете, почему ваш код печатает тип списка, потому что вы передаете список, можете ли вы увидеть, как изменить его, чтобы вы передавали что-то другое (например, фактическое число, которое вы хотите напечатать) ?

 Console.WriteLine(numbers);
                  ^^^^^^^ 
           this needs to be something else - can you work out what?
 

Комментарии:

1. я понятия не имею , что печатать вместо этого, но теперь я, по крайней мере, понимаю, почему консоль выдает мне эту «ошибку».

2. Какова спецификация задания? (ответ: выводит номер из списка в определенном диапазоне значений ).. Итак, что это за переменная в коде, который вы написали? (подсказка: это не numbers так )

3. Это должно быть утешением. WriteLine(ввод); Верно? , я только что заметил, что везде написал «число» вместо «ввод», теперь это работает, потому что он проверяет числа, которые я добавил в список, а не что-то, о чем я понятия не имею, почему я написал