#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()
при использовании LINQ3. @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));