如何修复最佳重载方法匹配有一些无效的参数?

时间:2013-03-29 12:59:20

标签: c#

代码有什么问题,在标题中收到错误。我认为这是一个语法错误,但我不确定,因为我几乎没有关于错误实际含义的信息

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{

class Program
{

    static void Main(string[] args)
    {

        Console.WriteLine("Please Input Number of Rows you want to make in your pyrimid: ");

        int num = int.Parse(Console.Read()); // error here

        Console.WriteLine(num);// Just to check if it is getting the right number
        Console.Read();//This is Here just so the console window doesn't close when the program runs

    }
}
}

编辑:只是为了澄清,我希望代码只是从用户那里得到一个数字,然后打印用户输入的数字。

编辑:为快速回应干杯:D

4 个答案:

答案 0 :(得分:8)

int.Parse接受字符串作为参数。使用Console.ReadLine()从用户处获取字符串,然后将其传递到int.Parse

int num = int.Parse(Console.ReadLine());

请注意,如果用户输入无法识别为FormatException的内容,则会抛出int。如果您不确定,用户将输入一个好的号码(我一直没有),请使用TryParse。示例如下:

int value;

if (int.TryParse(Console.ReadLine(), out value))
    Console.WriteLine("parsed number as: {0}", value);
else
    Console.WriteLine("incorrect number format");

答案 1 :(得分:1)

问题是Console.Read()返回一个int,但int.Parse期望一个字符串。只需将其更改为

即可
int num =Console.Read();

答案 2 :(得分:1)

Console.Read()和ASCII

这种情况正在发生,因为Console.Read()实际上会返回int,而不是string。它返回按下的键的ASCII代码,您需要将其转换为char然后转换为字符串,然后解析它。

var val = int.Parse(((char)Console.Read()).ToString());

请注意,Console.Read()不会以您认为的格式返回整数,09的值实际上是6070的值键代码不是您按下的字符。

See the ASCII table here

Console.ReadLine()

另一种可能更好的解决方案是使用Console.ReadLine()返回string

var val = int.Parse(Console.ReadLine());

警告

使用int.Parse()时应始终小心,因为如果提供的字符串不是数字,它将引发异常。一个更好的选择是使用int.TryParse(),你给出一个out参数,它返回解析是否成功。

string text = Console.ReadLine();
int val;
if (int.TryParse(text, out val))
{
    // It is a number
}
{
    // It is not a number
}

答案 3 :(得分:0)

你得到它的原因是因为Console.Read返回一个int

http://msdn.microsoft.com/en-us/library/system.console.read.aspx

它无法解析int,它只能解析字符串。

你可能想要Console.ReadLine - 它返回一个字符串。