Есть ли другой альтернативный способ добавить Console.WriteLine () в этом сценарии - PullRequest
0 голосов
/ 31 декабря 2018

В этом коде я хочу добавить Console.Writeline () после каждого Console.ReadLine (), но то, как я реализую код, вызывает ошибку.Есть ли другой способ, как я могу добавить 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 голосов
/ 31 декабря 2018

Вы не можете поместить WriteLine () между вашим ReadLine (), потому что вы инициализируете свойства вашего нового Клиента.Однако вместо этого вы можете сделать это следующим образом:

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
    };

Когда вы поймете, почему это работает, я бы порекомендовал сделать то, что предложила Исма (если вас учили, как создавать свои собственные методы).пока), чтобы сделать ваш код чище.Я написал это, чтобы помочь вам понять, почему то, что вы написали, не сработало.Сокращенные инициализаторы свойств, такие как:

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 #Точка с запятой.Это просто правило языка, что шаблон для установки свойств, подобных этому, состоит из одной строки, и только один оператор может появиться в правой части =

. Вы не должны использовать сокращенный способ (как указано выше).) или вы должны поместить все несколько строк кода, которые вы хотите использовать, в один метод, а затем вызвать этот метод (как предложила Исма)

Я также хотел бы отметить, что вы сказали, что хотите«писать сообщение после каждой readline» - обратите внимание, что ваша программа будет ждать, пока пользователь не введет что-либо, прежде чем она напечатает ваше сообщение.Способ Исмы (и выше) напечатать сообщение ПЕРЕД запросом readline, потому что это, как правило, то, что вы хотите сделать.

Если вы действительно хотите, чтобы это было после, то переместите их, чтобы они были после (но я думаю, что на самом деле вы можете только поблагодарить их за их вклад, и чрезмерно благодарные вещи раздражают ...) так что-то вроде этого (путь Исмы):

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..");
0 голосов
/ 31 декабря 2018

Вы можете создать метод, который печатает что-то и возвращает 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)
};
...