【问题标题】:"No overload for method 'TryParse' takes one argument" error when using double.TryParse使用 double.TryParse 时出现“方法 'TryParse' 没有重载需要一个参数”错误
【发布时间】:2013-06-29 02:41:04
【问题描述】:

等级:新手

我正在用 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”的重载没有一个参数。

如何解决此错误? 提前致谢。非常感谢您的帮助。

【问题讨论】:

    标签: c#


    【解决方案1】:
                double rad = Convert.ToDouble(radius);
    
                if (double.TryParse(rad) == false)
    

    应该是

                double rad;
                if (!double.TryParse(radius, out rad))
    

    使用!(不)而不是== false,作为更好的编码实践。

    此外,TryParse 需要一个 out 值(它会进行解析,不需要 Convert.ToDouble 并且...如果它不可解析,您的 Convert.ToDouble 将出错 - 糟糕!)

    【讨论】:

    • 我的帖子是第一个 Argsajgjgsakgshh ......我想这个三重匹配答案是不可避免的。
    • 为什么使用! 比使用==false 更好?对我来说似乎很主观。
    • just as better coding practice. - 这并不是更好,它只是通常首选的编码风格。您不需要这样做,但如果您不这样做,人们可能会认为您的代码不专业。
    【解决方案2】:

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

    double rad;
    if (!double.TryParse(radius, out rad))
    { 
        Console.WriteLine("Numbers only!"); 
    }
    

    【讨论】:

    • 我认为最后一个分号是不需要的。
    • 是的,它不应该在那里。
    • 最近写了太多 JavaScript。修复它
    【解决方案3】:
    double result;
    
    if (double.TryParse("123.45", out result))
    {
        Console.WriteLine(result);
    }
    

    有两个TryParse() 方法重载

    如果您需要将指定样式和文化特定格式的数字的字符串表示形式转换为其等效的双精度浮点数,那么您应该使用重载函数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多