C# &引用;方法'没有重载;胰蛋白酶';只接受一个论点;使用double.TryParse时出错

C# &引用;方法'没有重载;胰蛋白酶';只接受一个论点;使用double.TryParse时出错,c#,C#,级别:新手 我正在用C#编写一个控制台程序,用于查找圆、三角形和梯形的区域。我想通过使用double.TryParse确保用户只输入数字 代码如下: Console.WriteLine("AreaSolution finds the area of different shapes."); Console.ReadLine(); ln1: Console.WriteLine("To find area of circle, press c. To find

级别:新手

我正在用C#编写一个控制台程序,用于查找圆、三角形和梯形的区域。我想通过使用double.TryParse确保用户只输入数字

代码如下:

        Console.WriteLine("AreaSolution finds the area of different shapes.");
        Console.ReadLine();
 ln1:   Console.WriteLine("To find area of circle, press c. To find area of triangle press t.For trapezoid, enter tr. ");

        var x = Console.ReadLine();
        switch (x)
        {
            case "c":
                Console.WriteLine("Enter radius of circle, in centimeters");
                var radius = Console.ReadLine();
                double rad = Convert.ToDouble(radius);

                if (double.TryParse(rad) == false)
                { Console.WriteLine("Numbers only!"); };


                Console.WriteLine("AREA: " + 3.14 * rad * rad + " cm sq.");
                Console.ReadLine();
                break;

            case "t":
                Console.WriteLine("Enter base, in centimeters");
                var bas = Console.ReadLine();
                double tbase = Convert.ToDouble(bas);


                Console.WriteLine("Enter height, in centimeters");
                var tHi = Console.ReadLine();
                double tHei = Convert.ToDouble(tHi);
                Console.WriteLine("AREA: " + (tbase * tHei / 2) + " cm sq.");
                Console.ReadLine();
                break;

            case "tr":
                Console.WriteLine("Enter the length of the top base, in cm");
                var tpbas = Console.ReadLine();
                double bas1 = Convert.ToDouble(tpbas);

                Console.WriteLine("Enter length of bottom base, in cm");
                var btmbase = Console.ReadLine();
                double bas2 = Convert.ToDouble(btmbase);

                Console.WriteLine("Enter height, in cm");
                var trHe = Console.ReadLine();
                double trH = Convert.ToDouble(trHe);

                Console.WriteLine("AREA: " + (bas1 + bas2) * trH / 2 + " cm sq.");
                Console.ReadLine();
                break;
            default:
                Console.WriteLine("Please enter a valid character:  c for circle, t for triangle, or tr for trapeziod.");
                break;


        }
        Console.WriteLine("Another computation?(Y/N)");
        string newComp = Console.ReadLine();

        switch (newComp)
        {
            case "y":
                goto ln1;
                break;
            case "n":
                return;
                break;
        }
但是,在“double.TryParse(rad)”行中,我得到一个错误:

方法“TryParse”不重载一个参数

如何修复此错误? 提前谢谢。非常感谢你的帮助

            double rad = Convert.ToDouble(radius);

            if (double.TryParse(rad) == false)
应该是

            double rad;
            if (!double.TryParse(radius, out rad))
使用
(not)而不是
==false
,就像更好的编码实践一样


另外,TryParse需要一个
out
值(它进行解析,不需要
Convert.ToDouble
和…您的
Convert.ToDouble如果不可解析,它将出错-错误!)

TryParse返回一个布尔值,并使用
out
参数返回解析后的值

double rad;
if (!double.TryParse(radius, out rad))
{ 
    Console.WriteLine("Numbers only!"); 
}
有两种方法重载

如果需要将指定样式和区域性特定格式的数字的字符串表示形式转换为等效的双精度浮点数,则应使用重载函数:

if (double.TryParse("2.3", NumberStyles.Number, CultureInfo.CurrentCulture, out result))
{
    Console.WriteLine(result);
}

if (double.TryParse("3.4", NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out result))
{
    Console.WriteLine(result);
}

if (double.TryParse("5,6", NumberStyles.Any, CultureInfo.GetCultureInfo("fr-CA"), out result))
{
    Console.WriteLine(result);
}

if (double.TryParse("7.8", NumberStyles.Any, CultureInfo.InvariantCulture, out result))
{
    Console.WriteLine(result);
}

我的帖子是第一个argsajgsakshh。。。我想这个三重匹配的答案是不可避免的。为什么要使用
优于
==false
?对我来说似乎是主观的。
就像更好的编码实践一样。
-这并不是真的更好,它只是通常首选的编码风格。你不需要这样做,但如果你不这样做,人们可能会认为你的代码不专业。我认为不需要最后一个分号。是的,它不应该在那里。最近写了太多JavaScript。修好了
if (double.TryParse("2.3", NumberStyles.Number, CultureInfo.CurrentCulture, out result))
{
    Console.WriteLine(result);
}

if (double.TryParse("3.4", NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out result))
{
    Console.WriteLine(result);
}

if (double.TryParse("5,6", NumberStyles.Any, CultureInfo.GetCultureInfo("fr-CA"), out result))
{
    Console.WriteLine(result);
}

if (double.TryParse("7.8", NumberStyles.Any, CultureInfo.InvariantCulture, out result))
{
    Console.WriteLine(result);
}