我收到错误。我正在看的方式是我希望从dayrental()* 19.95返回的值存储在租赁中。
使用未分配的本地变量'rental'
private void button1_Click(object sender, EventArgs e)
{
double rental;
if (checkBox1.Checked == true)
rental = dayrental() * 19.95;
label4.Text = Convert.ToString(rental);
}
private void label4_Click(object sender, EventArgs e)
{
}
public double dayrental()
{
var timeSpan = dateTimePicker2.Value - dateTimePicker1.Value;
var rentalDays = timeSpan.Days;
return (double) rentalDays;
//label4.Text = Convert.ToString(rentalDays);
}
答案 0 :(得分:2)
如果未选中checkBox1,rental
将无法获取值。那不好( - :
惯用解决方案是分配默认值,
但就你的情况而言,我认为这更好:
if (checkBox1.Checked) //same as "==true" only prettier
{
rental = dayrental() * 19.95;
label4.Text = Convert.ToString(rental);
}
但我真的不知道背景,所以我说不出来
无论如何你得到了重点 - rental
必须绝对获得一个值。在您的代码中,它可能无法获得值..
答案 1 :(得分:2)
此消息出现的原因是编译器不允许您使用未分配的变量。
让我们在这里考虑您的CheckBox.Checked
属性是错误的,会发生什么?您正在尝试转换变量的值。最后,你正在使用它!但编译器应该如何知道它的价值呢?
以下是深入解释此错误的链接:Compiler Error CS0165
。
您需要通知编译器您知道自己在做什么。怎么样?通过初始化变量的默认值。它可能是以下某些内容:
double rental = default(double);
或
double rental = 0;
否则,当CheckBox
不是Checked
时,您可能希望表单根本不显示任何值。然后,你需要一个可以为空的双重类型。
double? rental = null;
或
double? rental = default(double?);
使用此可以为空的double值类型时,这将允许您在CheckBox.Checked = false
时不显示任何内容。现在,您应该问自己,当0
不是CheckBox
时,是否要显示零(Checked
)。
顺便说一下,if
条件只需要在括号中使用布尔表达式,而这正是CheckBox.Checked
属性的所在,因此无需将其与true
进行比较。 / p>
double? rental = null;
if (CheckBox1.Checked)
rental = DayRental() * 19.95;
label4.Text = Convert.ToString(rental);
遵循这个简单的规则,你应该永远不会再犯这个错误。
这有帮助吗?
答案 2 :(得分:0)
用0.0初始化它然后会为它分配一个值......
double rental = 0.0;
答案 3 :(得分:0)
double rental = 0.0;
if (checkBox1.Checked == true)
rental = dayrental() * 19.95;
label4.Text = Convert.ToString(rental);
这样,如果未选中复选框,则租借将具有值。