如何确定字符串的类型是int还是double,以便在重载方法中使用?C#
我想使用插入到texbox中的值调用重载方法。默认情况下,它是值字符串,所以我必须检查它是int类型还是double类型。 我使用TryParse()检查并查看值是int还是double,但这会导致每个文本框有2个变量。我只想要已经成功的两个变量。 我不知道如何确定哪个成功,以便在重载方法调用中使用它们 我的代码看起来像这样如何确定字符串的类型是int还是double,以便在重载方法中使用?C#,c#,overloading,string-conversion,C#,Overloading,String Conversion,我想使用插入到texbox中的值调用重载方法。默认情况下,它是值字符串,所以我必须检查它是int类型还是double类型。 我使用TryParse()检查并查看值是int还是double,但这会导致每个文本框有2个变量。我只想要已经成功的两个变量。 我不知道如何确定哪个成功,以便在重载方法调用中使用它们 我的代码看起来像这样 string a = textBox1.Text, b = textBox2.Text; int f; double d;
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语句,编译器会给我一个错误,告诉我double值未赋值。我知道很多if-else语句都是难看的代码,但这是我目前唯一知道的方法
if(f == '\0' && s == '\0')
{ Area(d, sD, out sum); }
else if(d=='\0' && s=='\0')
{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
实现呢?为什么不总是使用双(
(中间)一个呢?另外,不要像那样使用void
和out
参数,而只使用返回a*b代码>。我正在做的实践要求使用带double和int的重载方法。否则我只会使用double。这是为了清楚地了解重载方法是如何工作的,以及除此之外的所有内容。这是我正在读的一本书,其实没有一个好的方法可以做到这一点,但这在很大程度上是因为这不是一件好事。mjwills有权让您只使用double而忽略int,但如果您想检测int和double,那么我唯一能想到的就是使用bool来确定您想要使用的转换(例如bool value1in
)然后使用一个看起来很糟糕的四分支if/elseif语句来确定要调用哪个重载。out参数是否因为是引用类型而不支持null?我们只是介绍了,并没有真正涵盖它。这不包括a或b作为int可解析,而另一个仅作为double可解析的场景(即有一个重载,您没有调用)。您的方法将起作用,只需要再扩展两种情况(“a int,b double”和“a double,b int”)。这并不漂亮,但考虑到OP复杂的需求,这是意料之中的……我认为OP的书可能需要一些工作,如果它制造了这些类型的问题,来说明需要像重载这样相对简单的东西。这也树立了一个坏榜样,因为这是一个糟糕的解决方案。绝对100%同意。不过,只要OP阅读评论,他们至少应该意识到这一点……:)谢谢,我只需要把两个参数放在同一个if语句中,嵌套所有的可能性。没有那么漂亮,但这是为了练习。非常感谢。