Не удается преобразовать из ‘string’ в ‘system.collections.generic.list

#c#

#c#

Вопрос:

Я борюсь с процедурным программированием. Я должен вызвать метод, но при наведении курсора мыши на последовательный (ввод) он говорит:

Не удается преобразовать из ‘string’ в ‘system.collections.generic.list.

Я не знаю, как обойти это, потому что я, честно говоря, не знаю, как преобразовать строку в system.collections.generic.list . Это код, который я использую:

 using System;
using System.Collections.Generic;

namespace HelloWorld
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            Console.Write("Enter a few numbers (eg 1-2-3-4): ");
            var input = Console.ReadLine();
            Console.WriteLine(Consecutive(input));
        }

        public static bool Consecutive(List<int> input)
        {
            var numbers = new int[input.Count];
            input.CopyTo(numbers);
            Array.Sort(numbers);
            for (var i = 1; i < numbers.Length; i  )
            {
                if (numbers[i] != numbers[i - 1]   1)
                    return false;
            }
           return true;
        }
     }
 }
  

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

1. вам необходимо проанализировать входные данные в list … попробуйте разделить на ‘-‘, затем используйте parse из int class

2. как input.Split('-').Select(int.Parse).ToList() при использовании LINQ

3. @PrasadTelkikar Теперь я понимаю, что это не совсем относится к теме, но я впервые сталкиваюсь с этим термином. Я делал это упражнение в udemy, которое называлось так.

4. В общем, когда вы принимаете входные данные от пользователей, вы должны ожидать, что ввод часто будет неправильным. Если вы проанализируете свои целые числа с помощью int.Parse , это вызовет исключение, если строка, которую вы анализируете, не является целым числом (и ошибка пользовательского ввода вряд ли является исключительным случаем). Рассмотрите возможность использования int.TryParse вместо этого.

5. @Flydog57 когда я меняю его на TryParse, я получаю другое высказывание: аргументы типа для массива методов. Convertall не может быть выведен из использования при наведении курсора мыши на ConvertAll

Ответ №1:

Console.ReadLine() возвращает строку вместо списка целых чисел. Вам нужно преобразовать эту строку в List и передать ее в Consecutive(List<int>) функцию

 ...
var input = Console.ReadLine();
//Additional line to convert string to List<string>
var processedInput = Array.ConvertAll(input.Split('-'), int.Parse).ToList();
Console.WriteLine(Consecutive(input));

...
  

Объяснение преобразования строки в List<int> :

  • Сначала мы разделяем входную строку на - в качестве разделителя. Array.ConvertAll() преобразует IEnumerable<string> в int. .ToList() преобразовать массив целых чисел в List<int> .

Если вы хотите использовать TryParse для разбора целых чисел, то вы можете использовать функцию out variable в C # 7.

 //This feature is available from C#7. 
//Here if input string fails to parse string to int, it will store 0  as default.
var processedInput = Array.ConvertAll(
          input.Split('-'), x => int.TryParse(x, out var i) ? i : 0)
          .ToList();
  

Ответ №2:

Вам необходимо преобразовать строку в список,

 var input = Console.ReadLine();
var inputs = input.Split("-").Select(int.Parse).ToList();
Console.WriteLine(Consecutive(inputs));