【问题标题】:Overloaded method does not use double input重载方法不使用双输入
【发布时间】:2017-06-10 14:58:08
【问题描述】:

我正在尝试创建控制台应用程序以了解方法重载。 我有这样的类库

namespace GetStringName
{
    public class GetString
    {
        public void Player(double num)
        {
            double number = num * 2;
            Console.Write(number);
        }
        public void  Player(string name)
        {
            char[] charr = name.ToCharArray();
            Array.Reverse(charr);
            Console.Write(charr);
        }   
    }
}

我得到了如下所示的控制台应用程序

using GetStringName;
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            GetString y = new GetString();
            y.Player(Console.ReadLine());           
            Console.ReadLine();
        }
    }
}

无论我输入什么(字符串或整数),它总是会执行恢复字符串的操作。 你能告诉我我做错了什么吗?

【问题讨论】:

标签: c# overloading


【解决方案1】:

这是因为Console.ReadLine() 方法返回字符串。如果你TryParse你的输入,如果它是double,它将调用double的方法,否则它将调用string的方法。例如:

static void Main(string[] args) {
    GetString y = new GetString();
    string input = Console.ReadLine();
    double doubleInput;

    if(double.TryParse(input, out doubleInput)) {
        y.Player(doubleInput);
    } else {
        y.Player(input);
    }
}

【讨论】:

    【解决方案2】:

    Console.ReadLine() 将始终返回一个字符串,无论您输入什么内容。为了将您的输入解析为双精度,您需要使用 double.Parse 或 double.TryParse。

    例子:

    double input;
    bool success = double.TryParse(Console.ReadLine(), out input);
    if(success)
    {
        y.Player(input);
    }
    

    或者

    try
    {
         y.Player(double.Parse(Console.ReadLine()));
    }
    catch(FormatException)
    {
         //Input is not a double
    }
    catch(OverflowException)
    { 
         //Input is out of bounds for a double type 
    }
    

    TryParse 将返回一个布尔值,指示解析是否成功,而如果输入无效,Parse 将抛出异常。

    一般来说,我总是更喜欢 TryParse,除非你特别想让用户知道他们的输入为什么无效。

    【讨论】:

      【解决方案3】:

      您需要提供 double 作为方法的参数 试试这个

       y.Player(Double.Parse(Console.ReadLine()));
      

      【讨论】:

      • 如果用户输入一个不可解析的值怎么办?
      • 这是另一个问题。我回答了这个话题,他为什么会陷入字符串过载。
      • 当然。上面的 Stradivarius 提供了完整的解决方案。
      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2016-03-07
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多