'int.Parse(string)'的最佳重载方法匹配具有一些无效参数

时间:2011-09-23 18:30:47

标签: c# visual-studio-2010 formatexception

    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) {}

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

您需要调用Console.ReadLine:

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

请注意上面的额外()

您当前的方法是传递从Console.ReadLine方法构建的委托,而不是调用方法的结果。

话虽如此,如果您正在阅读用户的输入,我强烈建议您使用int.TryParse代替int.Parse。用户输入经常出错,这可以让你优雅地处理它。

答案 2 :(得分:2)

你想:

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

目前它正在查看Console.ReadLine作为方法组,并尝试应用方法组转换 - 如果您将其用作方法的参数,这将有效采用Func<string>或类似的东西,但不是仅采用字符串的方法。

您希望调用方法,然后将结果作为参数传递。要调用该方法,您需要括号。

答案 3 :(得分:2)

你可能意味着:

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

注意ReadLine之后的parens。您正在尝试传递ReadLine的委托而不是返回值。

答案 4 :(得分:2)

将其更改为

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

您在Console.ReadLine

之后缺少()

答案 5 :(得分:2)

Console.ReadLine是一个方法,必须用括号调用它:

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

没有括号,编译器认为它是方法组。