Лучший перегруженный метод, соответствующий 'int.Parse(string)', имеет несколько недопустимых аргументов.

    Console.WriteLine("Enter the page that you would like to set the bookmark on: ");
    SetBookmarkPage(int.Parse(Console.ReadLine));

Это часть int.Parse(string), которая дает мне сообщение об ошибке темы этой темы. Не очень понимаю, что мне делать, я разбираю строку в int и отправляю методом SetBookmarkPage, что мне не хватает? SetBookmarkPage выглядит так и содержится в том же классе:

private void SetBookmarkPage(int newBookmarkPage) {}


person Petrus K.    schedule 23.09.2011    source источник
comment
вздох ... пропустил несколько скобок .. Я виню усталость и VS за то, что они не заполняют скобки, как это делает Netbeans: p спасибо, что указали на мою очевидную глупую ошибку ›_‹   -  person Petrus K.    schedule 23.09.2011


Ответы (6)


Измените его на

SetBookmarkPage(int.Parse(Console.ReadLine()));

Вы отсутствовали () после Console.ReadLine

person Adnan Bhatti    schedule 23.09.2011

Нет перегрузки int.Parse, которая принимает делегат. Похоже, вы хотели сделать

 int.Parse(Console.ReadLine())

Однако даже в этом случае вы подвергаете свою программу потенциальному исключению. Вы должны сделать что-то вроде этого:

 int bookmarkId = 0;
 string info = Console.ReadLine();

 if(!int.TryParse(info, out bookmarkId))
    Console.WriteLine("hey buddy, enter a number next time!");

 SetBookmarkPage(bookmarkId);
person Tejs    schedule 23.09.2011
comment
+1 за TryParse. Это много раз спасало мою задницу при массовом импорте и преобразовании. - person rownage; 23.09.2011

Вам нужно вызвать Console.ReadLine:

SetBookmarkPage(int.Parse(Console.ReadLine()));    

Обратите внимание на дополнительные () выше.

Ваш текущий метод передает делегат, созданный из метода Console.ReadLine, а не результат вызываемого метода.

При этом, если вы читаете ввод от пользователя, я настоятельно рекомендую использовать int.TryParse вместо int.Parse. Пользовательский ввод часто содержит ошибки, и это позволит вам изящно с ним справиться.

person Reed Copsey    schedule 23.09.2011

Ты хочешь:

SetBookmarkPage(int.Parse(Console.ReadLine()));

На данный момент он просматривает Console.ReadLine как группу методов и пытается применить преобразование группы методов, что будет работать, если вы затем используете его в качестве аргумента для метода, принимающего Func<string> или что-то подобное, но не для метода, принимающего только строку.

Вы хотите вызвать метод, а затем передать результат в качестве аргумента. Чтобы вызвать метод, вам нужны круглые скобки.

person Jon Skeet    schedule 23.09.2011

Вы, вероятно, имели в виду:

SetBookmarkPage(int.Parse(Console.ReadLine()));

Обратите внимание на круглые скобки после ReadLine. Вы пытаетесь передать делегат для ReadLine вместо возвращаемого значения.

person Andrew Barber    schedule 23.09.2011

Console.ReadLine — это метод, вы должны вызывать его в круглых скобках:

SetBookmarkPage(int.Parse(Console.ReadLine()));

Без круглых скобок компилятор считает, что это группа методов.

person vcsjones    schedule 23.09.2011