2010-10-25 36 views
2

我得到错误。我看的方式是我想从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); 
    } 
+1

我必须为那真正愚蠢的问题而道歉。 – user770022 2010-10-25 16:17:29

+0

不愚蠢..它发生了,直到你认识到错误,它需要时间来理解它(我敢打赌,你会从现在开始认识到它..( - :)。 – 2010-10-25 16:21:54

+0

没有这样的事情是一个愚蠢的问题,这是 – 2010-10-25 16:22:34

回答

2

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

让我们来看看你的CheckBox.Checked属性是否为假,会发生什么?您正在尝试转换变量的值。最后,你正在使用它!但是编译器应该如何知道它的价值呢?

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

你需要给编译器打电话,你知道你在做什么。怎么样?通过初始化一个默认值给你的变量。这可能是以下一些:

double rental = default(double); 

double rental = 0; 

否则,您可能希望你的形式显示任何价值可言,当这CheckBox不是Checked。然后,你需要一个可为空的双精度型。

double? rental = null; 

double? rental = default(double?); 

虽然使用这种双可为空值类型,这将让你当CheckBox.Checked = false什么都不显示。现在,您应该问自己,当CheckBox不是Checked时是否要显示零(0)。

顺便说一句,if条件只需要一个布尔表达式在其括号中,这正是CheckBox.Checked属性,因此不需要将其与true进行比较。

double? rental = null; 

if (CheckBox1.Checked) 
    rental = DayRental() * 19.95; 

label4.Text = Convert.ToString(rental); 

遵循这个简单的规则,你应该永远不会再次得到这个错误。

这有帮助吗?

+1

我是新来C#(来自Java)并不知道有关default()。谢谢你。 – Tenner 2012-04-04 14:21:44

2

如果未选中checkBox1的,rental不会得到一个值。这不是好( - :

惯用的解决方案是指定一个默认值,
但在你的情况,我觉得这是更好的:

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

但我真的不知道的情况下,使我不能告诉
总之你明白了吧 - rental必须绝对得到的值。在你的代码可能无法得到的值..

0

0.0初始化它,然后它会被assinged值。 ..

double rental = 0.0; 
0
double rental = 0.0; 
if (checkBox1.Checked == true) 
     rental = dayrental() * 19.95; 
label4.Text = Convert.ToString(rental); 

如果该复选框未选中,然后租赁将有一个价值的方式。

+0

为什么你会认为他在零号checkbox1没有被选中的时候会在零号被删除呢? – 2010-10-25 16:13:59

+1

我假设他足够聪明,可以用他想要的值替换零号 – Dismissile 2010-10-25 16:26:53

相关问题