我们如何在 C# 中从用户那里获取正确的字符串?

How we take correct string from user in C#?

当使用控制台应用程序从用户那里获取 "user name" 作为输入时.. 我怎样才能让他输入字符串而不是键盘上的 Enter 键作为输入字符串?**

当我想要你的名字时,我希望你不要输入空格然后输入密钥或输入密钥而不写你的名字

string name;
name = Console.ReadLine();

在这里,我不希望用户按 Enter 作为输入而不是他的名字

一般来说,您可以在用户输入用户名后应用规则,他们按[Enter]表示。此时,您可以验证条目,如果不正确,则向他们显示一条消息,指出需要更改的内容,并再次提示他们。这一切都是在一个循环中完成的,其退出条件是一个有效的用户名。

为了简化事情,我将其放入一个辅助方法中,该方法具有一些参数,可以设置这些参数来执行一些通用规则。您也可以随时添加自己的规则:

public static string GetStringFromUser(string prompt, int minLength,
    bool allowAlpha, bool allowNumeric, bool allowNonAlphaNumeric)
{
    var errorMessage = new StringBuilder();
    var input = string.Empty;

    while (true)
    {
        errorMessage.Clear();
        Console.Write(prompt);
        input = Console.ReadLine();

        if (input.Length < minLength)
        {
            errorMessage.AppendLine(
                $" - Entry must be longer than {minLength} characters");
        }
        if (!allowAlpha && input.Any(c => char.IsLetter(c)))
        {
            errorMessage.AppendLine(" - Entry must not contain any letters");
        }
        if (!allowNumeric && input.Any(c => char.IsDigit(c)))
        {
            errorMessage.AppendLine(" - Entry must not contain any numbers");
        }
        if (!allowNonAlphaNumeric && input.Any(c => !char.IsLetterOrDigit(c)))
        {
            errorMessage.AppendLine(
                " - Entry must not contain any non-alphanumeric characters");
        }

        if (errorMessage.Length == 0) break;

        Console.WriteLine("\nThe following errors must be corrected:");
        Console.WriteLine(errorMessage.ToString());
    }

    Console.WriteLine();

    return input;
}

然后,要使用此功能,您只需传入要执行的规则即可。例如,我在下面指定用户名必须是 6 个字符,并且不能包含任何数字或非字母数字字符:

static void Main()
{
    var userName = GetStringFromUser("Enter your user name: ", 6, true, false, false);

    Console.WriteLine($"Welcome, {userName}!");

    Console.Write("\nPress any key to exit...");
    Console.ReadKey();
}

输出