代码之家  ›  专栏  ›  技术社区  ›  user770022

错误1使用未分配的局部变量“rental”

c#
  •  2
  • user770022  · 技术社区  · 15 年前

    我明白了。我的看法是,我希望从dayreart()*19.95返回的值存储在rental中。

    使用未分配的局部变量“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 回复  |  直到 15 年前
        1
  •  2
  •   Will Marcouiller    15 年前

    出现此消息的原因是编译器不允许您使用未分配的变量。

    让我们考虑一下 CheckBox.Checked 财产是假的,怎么办?您正在尝试转换变量的值。最后,你在用它!但是编译器怎么知道它值多少钱呢?

    下面是一个深入解释此错误的链接: Compiler Error CS0165

    你需要告诉编译器你知道你在做什么。怎样?通过初始化变量的默认值。可能有以下几种情况:

    double rental = default(double);
    

    或

    double rental = 0;
    

    否则,您可能希望窗体在以下情况下完全不显示值 CheckBox Checked . 那么,您需要一个可以为空的double类型。

    double? rental = null;
    

    或

    double? rental = default(double?);
    

    当使用此可为空的双值类型时,这将允许您在 CheckBox.Checked = false . 现在,你应该扪心自问你是否想要零( 0 )当 复选框 不是 .

    if 条件的括号中只需要一个布尔表达式,这正是 属性是,因此无需将其与 true .

    double? rental = null;
    
    if (CheckBox1.Checked) 
        rental = DayRental() * 19.95;
    
    label4.Text = Convert.ToString(rental);
    

    这有用吗?

        2
  •  2
  •   Oren A    15 年前

    rental 不会得到值。那不好(—:

    惯用的解决方案是指定一个默认值,

    if (checkBox1.Checked) //same as "==true" only prettier
    {
     rental = dayrental() * 19.95;
     label4.Text = Convert.ToString(rental);
    }  
    

    但我真的不知道背景,所以我说不出来。
    不管你怎么说- 必须 得到一个值。在您的代码中,它可能没有值。。

        3
  •  0
  •   AGoodDisplayName    15 年前

    用0.0初始化它,然后它将被分配一个值。。。

    double rental = 0.0; 
    
        4
  •  0
  •   Dismissile    15 年前
    double rental = 0.0;
    if (checkBox1.Checked == true)
            rental = dayrental() * 19.95;
    label4.Text = Convert.ToString(rental);