如何确定字符串是 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;
我想使用插入到我的文本框中的值调用重载方法。默认情况下它的值为字符串,所以我必须检查它是 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;