在验证用户输入的同时保持对控制台输入的控制

时间:2018-06-16 04:42:26

标签: c#

我需要为逗号分隔的字符串修改它。我希望用户能够输入多个数字,但我需要在继续之前验证它们是否都是数字。有什么想法吗?

while (!int.TryParse(Console.ReadLine(), out iValue))
{
    Console.WriteLine("Please Enter a valid Number!");
}

2 个答案:

答案 0 :(得分:1)

您可以实现自定义方法来解析整数数组并以相同的方式使用它:

void Main()
{
    while (!TryParseIntegerArray(Console.ReadLine(), out var arr))
    {
        Console.WriteLine("Please Enter a valid integer or comma-separated string!");   
    }

    // work with arr here
}

bool TryParseIntegerArray(string input, out int[] arr)
{
    if (input == null)
        throw new ArgumentNullException(nameof(input));

    try
    {
        arr = input.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries)
                   .Select(int.Parse)
                   .ToArray();
        return true;
    }
    catch (FormatException)
    {
        arr = null;
        return false;
    }
}

但是,我不建议直接使用Console.ReadLine()作为参数,TryParseIntegerArrayint.TryParse。至少你需要检查它是否为null。例如:

string input;
int[] arr;

do
{
    input = Console.ReadLine();

    if (string.IsNullOrWhiteSpace(input))
    {
        Console.WriteLine($"Good bye!");
        return;
    }
} while (!TryParseIntegerArray(input, out arr));   

答案 1 :(得分:0)

我最终得到了什么

    while (true)
    {
        try
        {
            var entry = Console.ReadLine();
            List<int> myNumbers = entry.Split(',').Select(int.Parse).ToList();
            serializedValue = _unitOfWork.GetSerializedCollection(myNumbers);
            Console.WriteLine(serializedValue);
            Console.ReadLine();
        }
        catch (FormatException)
        {
            Console.Write("You must enter a  number.");
            continue;
        }

        break;
    }