错误1使用未分配的本地变量'rental'

时间:2010-10-25 16:06:42

标签: c#

我收到错误。我正在看的方式是我希望从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);   
    }

4 个答案:

答案 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);

这样,如果未选中复选框,则租借将具有值。