如何确定字符串是 int 还是 double 类型,以用于重载方法? C#

How to determine if string is of type int or double, to used in overload method? C#

我想使用插入到我的文本框中的值调用重载方法。默认情况下它的值为字符串,所以我必须检查它是 int 还是 double 类型。 我正在使用 TryParse() 来检查值是 int 还是 double,但这导致我为每个文本框设置了 2 个变量。我只想要成功的 2 个变量。 我不知道如何确定哪个已经成功,以便我可以在重载方法调用中使用它们。

我的代码是这样的...

        string a = textBox1.Text, b = textBox2.Text;
        int f;
        double d;
        if(int.TryParse(a, out f))
        {
        }
        else if(double.TryParse(a, out d))
        {
        }
        int s;
        double sD;
        if (int.TryParse(b, out s))
        {
        }
        else if(double.TryParse(b, out sD))
        {
        }
        double x;
        //Do not know which values to pass, because i only want the 2 
        //that was successful
        Area(?, ?, out x);
        label3.Text = "This is the value " + x;
    }
    private static void Area(int a, int b, out double x)
    {
        x = a * b;
    }
    private static void Area(double a, double b, out double x)
    {
        x = a * b;
    }
    private static void Area(int a, double b, out double x)
    {
        x = a * b;
    }

如果我然后嵌套 if else 语句,编译器会给我一个错误,指出双精度值未分配。我知道一堆 if else 语句是丑陋的代码,但这是我目前知道的唯一方法。

        if(f == '[=11=]' && s == '[=11=]')
        { Area(d, sD, out sum); }
        else if(d=='[=11=]' && s=='[=11=]')
        {Area(f, sD, out sum;)}
        //and so on...

我能想出的最简单的形式是将 TryParses 按顺序放在单个 if 语句中,然后处理第一个成功的。

这留下了一个字符串无法解析(或两者都无法解析)的可能性,所以在那种情况下我抛出一个异常

int intA;
int intB;

double doubleA;
double doubleB;
double x;

if(int.TryParse(a, out intA) && int.TryParse(b, out intB))
{
   Area(intA, intB, out x);
}
else if (double.TryParse(a, out doubleA) && double.TryParse(b, out doubleB))
{
   Area(doubleA, doubleB, out x);
}
else
{
   throw new ArgumentException("cannot parse one or both numbers");
}

label3.Text = "This is the value " + x;