2010-10-25 2 views
2

Я получаю сообщение об ошибке. То, как я смотрю, это то, что я хочу, чтобы стоимость, возвращаемая с dayrental() * 19.95, хранилась в прокате.Ошибка Использование неназначенной локальной переменной «аренда»

Использование неназначенную локальной переменной «Аренда»

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

+0

Не глупо .. Это случается, и пока вы не узнаете ошибку, требуется время, чтобы понять это (я уверен, вы узнаете это с этого момента .. (-:). –

+0

Нет такого понятия, как глупый вопрос, это для чего этот сайт был создан. – 2010-10-25 16:22:34

ответ

2

Причина, по которой появляется это сообщение, заключается в том, что компилятор не позволяет вам использовать непризнанную переменную.

Давайте рассмотрим, что ваше свойство 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) отображался, когда CheckBox не является Checked.

Кстати, условие if требует только логическое выражение в скобках его, и это именно то, что CheckBox.Checked свойство не является, поэтому нет необходимости сравнивать его с true.

double? rental = null; 

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

label4.Text = Convert.ToString(rental); 

Следуя этому простому правилу, вы сможете никогда больше не получать эту ошибку.

Помогает ли это?

+1

Я новый для C# (из Java) и не знал о default(). Спасибо за это. – Tenner

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

Почему вы предполагаете, что он хочет, чтобы нуль отображался в label4, когда checkBox1 не отмечен? –

+1

Я предполагаю, что он достаточно умный, чтобы заменить 0 на нужное ему значение. – Dismissile

Смежные вопросы