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 
          
              

      }          
    }
  }
} 
  

Blockquote

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

0
thugcat85 15 Сен 2021 в 18:44

2 ответа

Лучший ответ

консоль просто сообщает мне это «System.Collections.Generic.List`1 [System.Int32]»

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

Console.WriteLine(numbers);

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

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

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

Console.WriteLine(numbers);
                  ^^^^^^^ 
           this needs to be something else - can you work out what?
1
Caius Jard 15 Сен 2021 в 16:20

Я пытался исправить твой код. Проверить это:

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 

            for (int i = 0; i < numbers.Count ; i++)
            {
                if (numbers[i] < lownum || numbers[i] > highnum)
                {
                    numbers.Remove(numbers[i]);
                }
            }

            foreach (var number in numbers)
            {
                Console.WriteLine(number);
            }
        }
    }
}

Он проверяет каждое число в списке и соответствует ли оно if (numbers[i] < lownum || numbers[i] > highnum) Если он соответствует условному выражению, я удаляю его из списка с помощью numbers.Remove(numbers[i]);. Я делаю это с помощью цикла for, чтобы я мог использовать переменную индексатора int i, чтобы также получить правильный объект в списке.

Также проверьте этот источник для списков :): https://www.tutorialsteacher.com/csharp/csharp -list

0
DavidChang 15 Сен 2021 в 16:45