在这种情况下是否还有另一种添加Console.WriteLine()的替代方法

时间:2018-12-31 09:51:48

标签: c# instance utf-16 console.writeline

在此代码中,我希望在每个Console.ReadLine()之后添加一个Console.Writeline(),但是我如何实现代码却给我一个错误。还有另一种方法可以在实例中添加Console.WriteLine()吗?

     public void CreateAccount()
        {
        Console.WriteLine("-=-=-=-=-=-=-=-=-=-=-=-=-=-");
        Console.WriteLine("Create an Account");
        Client createAccount = new Client("Create")
        {
            NameOfUser = Console.ReadLine(),
            SurnameOfUser = Console.ReadLine(),
            UserID = Console.ReadLine(),
            UserEmail = Console.ReadLine(),
            UserHomeAdd = Console.ReadLine(),
            UserMobileNumber = int.Parse(Console.ReadLine()),
            UsernameField = Console.ReadLine(),
            PasswordField = Console.ReadLine(),
            CoffePoints = int.Parse(Console.ReadLine())

        };


        List<Client> accountData = new List<Client>()
        {
            createAccount
        };

2 个答案:

答案 0 :(得分:4)

您可以创建一个打印内容并返回Console.ReadLine()的方法,例如:

private static string ReadLine(string writeMessage, bool parseAsInt = false)
{
    Console.WriteLine(writeMessage);

    var line = Console.ReadLine();

    if (parseAsInt)
    {
        int parseInt = 0;
        int.TryParse(line, out parseInt);
        line = parseInt.ToString();
    }

    return line;
}

然后在创建对象时调用它:

Client createAccount = new Client("Create")
{
    NameOfUser = ReadLine("What's your name?"),
    SurnameOfUser = ReadLine("Input your surname"),
    [...]
    CoffePoints = ReadLine("Coffe points?", true)
};

答案 1 :(得分:2)

您不能在WriteLine()之间放置WriteLine(),因为您正在初始化新Client的属性。但是,您可以改为这样做:

public void CreateAccount()
{
    Console.WriteLine("-=-=-=-=-=-=-=-=-=-=-=-=-=-");
    Console.WriteLine("Create an Account");
    Client createAccount = new Client("Create");

    Console.WriteLine("Enter NameOfUser ");
    createAccount.NameOfUser = Console.ReadLine();

    Console.WriteLine("Enter SurnameOfUser ");
    createAccount.SurnameOfUser = Console.ReadLine();

    Console.WriteLine("Enter UserID ");
    createAccount.UserID = Console.ReadLine();

    Console.WriteLine("Enter UserEmail ");
    createAccount.UserEmail = Console.ReadLine();

    Console.WriteLine("Enter UserHomeAdd ");
    createAccount.UserHomeAdd = Console.ReadLine();

    Console.WriteLine("Enter UserMobileNumber ");
    createAccount.UserMobileNumber = int.Parse(Console.ReadLine());

    Console.WriteLine("Enter UsernameField ");
    createAccount.UsernameField = Console.ReadLine();

    Console.WriteLine("Enter PasswordField ");
    createAccount.PasswordField = Console.ReadLine();

    Console.WriteLine("Enter CoffePoints ");
    createAccount.CoffePoints = int.Parse(Console.ReadLine());


    List<Client> accountData = new List<Client>()
    {
        createAccount
    };

当您了解为什么这样做有效时,我建议按照Isma的建议进行操作(如果您已被教过如何制作自己的方法的话),以使代码更简洁。我写这篇文章的目的是为了帮助您理解为什么您写的东西没有奏效。速记属性初始化程序是这样的:

Something s = new Something(){
   Property1 = ReadLine(),  //no semicolon here, this is all
   Property2 = ReadLine()   //one line of code in a=1,b=2,c=3 pattern
};

不能有多行这样的代码:

Something s = new Something(){
   Property1 = WriteLine("Blah"); ReadLine(); //can't put a semicolon here
   Property2 = WriteLine("Blah"); ReadLine(); //it HAS to be a comma, because it
   Property3 = WriteLine("Blah"); ReadLine(); //HAS to be a single line of code
};

请记住,不是返回键定义了C#中的新代码行,而是分号。这只是一种语言规则,用于设置此类属性的模式是单行,并且=

的右侧只能出现一条语句。

您必须不使用简写方式(如上所述),或者必须将要使用的所有多行代码放入一个方法中,然后调用该方法(如Isma建议)

我还要指出的是,您说过要“在每条阅读行后都给消息写行”-请注意,程序将在打印消息之前等待用户输入任何内容。 Isma的方法(以及上面的方法)在请求阅读行之前先打印一条消息,因为这通常是您想要执行的操作。

如果您确实想要,请把它们移到之后(但我想您真的只能感谢他们的输入,过分感谢的事情会令人烦恼...)这样的事情(Isma的方式) :

private static string ReadLine(string writeMessage)
{
    string s = Console.ReadLine();
    Console.WriteLine(writeMessage);
    return s;
}

或我的方式:

public void CreateAccount()
{
    Console.WriteLine("-=-=-=-=-=-=-=-=-=-=-=-=-=-");
    Console.WriteLine("Create an Account");
    Client createAccount = new Client("Create");

    createAccount.NameOfUser = Console.ReadLine();
    Console.WriteLine("Thanks for entering NameOfUser..");