我有一个textboxes
的WinForms应用程序。
目前应用程序很简单,我只想测试它是如何工作的。
它将来会变得更加复杂。
我试图创建一个规则来忽略空textboxes
或如果为空则使用值0。
我的代码就是这个:
decimal ata;
decimal a1;
decimal a2;
decimal a3;
decimal a4;
decimal a5;
decimal j = 0;
a1 = decimal.TryParse(textBox1.Text, out j);
a2 = decimal.Parse(textBox2.Text);
a3 = decimal.Parse(textBox4.Text);
a4 = decimal.Parse(textBox10.Text);
a5 = decimal.Parse(textBox24.Text);
ata = a1 + a2 + a3 + a4 + a5;
resposta.Text = ata.ToString();
我收到错误“无法将类型'bool'隐式转换为'decimal' 在行:
a1 = decimal.TryParse(textBox1.Text, out j);
任何人都可以帮我解决这个问题。
提前致谢,
答案 0 :(得分:2)
使用decimal.TryParse(textBox1.Text, out j);
代替a1 = decimal.TryParse(textBox1.Text, out j);
。您的值将在j
答案 1 :(得分:0)
你宣布了
decimal a1;
然后你试过了:
a1 = decimal.TryParse(textBox1.Text, out j);
decimal.TryParse
返回bool而不是小数
j
正在获取解析后的值
答案 2 :(得分:0)
TryParse
方法返回bool
值以指示转换是否成功。实际值在第二个参数(out
参数)中返回。
你可以尝试:
if (Decimal.TryParse(textBox1.Text, out j))
a1 = j;
如果解析成功,则仅设置a1
。否则a1
会保留其先前的值。
答案 3 :(得分:0)
返回值TryParse
是bool
。它表示转换是否成功。通常你会这样使用它:
decimal j;
if (decimal.TryParse(textBox1.Text, out j))
{
// here the conversion worked and it is save to use j
}
您检查它是否成功,在这种情况下,您可以使用转换变量的值,否则它将保持null
。
对于通过out
关键字传递的值,文档说:(s
相当于textBox1.Text
,result
相当于j
})
当此方法返回时,结果包含十进制数,该数字等于s中包含的数值(如果转换成功),或者如果转换失败则为零。如果s参数为null或String.Empty,不是有效格式的数字,或者表示小于MinValue或大于MaxValue的数字,则转换失败。此参数未初始化传递;结果中最初提供的任何值都将被覆盖。
答案 4 :(得分:0)
您想要使用TryParse()
方法的方式是这样的
decimal a1 = 0;
bool parsed = decimal.TryParse(textBox1.Text, out a1);
if(parsed)
{
//your arithmetic
}
else
{
//throw error
}
答案 5 :(得分:0)
错误是因为TryParse()
返回布尔值,而不是小数。您需要编写显式if语句来测试文本框是否为空。你应该考虑将它包装在一个方法中。
答案 6 :(得分:0)
您正在尝试将 bool 值分配给十进制变量,这是导致此错误的原因。 Decimal.TryParse()将返回bool值,请查看here您可以使用此值来检查解析是否成功。
您将在out参数中得到结果,即j。
答案 7 :(得分:0)
面向对象编程的一个好处是类似情况下代码的可重用性。
你提到过很多次你会使用某种“可以为空的十进制文本框”。为什么不为它创建一个类?你只需要创建一次类,每个需要你的可以为空的十进制文本框的人(特别是你的所有文本框)都可以重用这一个代码。
奖励:如果您需要更改此类文本框的行为,例如在空白时获得黄色背景,则所有特殊文本框的瞬间行为都相同。
如果不是空的但文字不是小数,你想要返回什么?
public class MyNullableTextBox:TextBox { public bool IsEmpty {get {return String.IsNullOrEmpty(base.Text);}}
public decimal Value
{
get
{
if (this.IsEmpty)
return 0M;
else
{
decimal parsedValue;
bool parsed = Decimal.TryParse(base.Text, out parsedValue);
if (!parsed)
// decide what you want in this case
else
return parsedValue;
}
}
}
}
好消息是,一旦您将此(作为参考)添加到您的解决方案中,就可以在工具箱中找到它并在表单设计器中使用,就像它是常规文本框一样