2015-04-18 3 views
0

Оператор присваивания для rk не может получить доступ к переменной xnbb из инструкции «if-else». Как я могу сделать это видимым? Должен ли я создать новый метод с «return»?Как сделать переменную видимой вне статута if-else?

var length = Math.Min(xr_arr.Count(), 24); 
for (int y = 0; y < 24; y++) 
{ 
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y))) 
    { 
     var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y)); 
     int xnbb = 1; 
    } 
    else 
    { 
     int xnbb = 0; 
    } 

    var rk = xnbb + 1 * Math.Round(Math.Exp(Math.Log(2) * (24 - y))); 
} 

ответ

3

Должен ли я создать какой-то новый метод с «возвращением»?

Нет, вы просто должны объявить его вне if-else пункта:

int xnbb = 0; 
if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y))) 
{ 
    var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y)); 
    xnbb = 1; 
} 
else 
{ 
    xnbb = 0; 
} 

Две вещи, чтобы отметить:

  1. Как xnbb по умолчанию настроен на 0, вы можете оставить свой else полностью:

    int xnbb = 0; 
    if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y))) 
    { 
        var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y)); 
        xnbb = 1; 
    } 
    
  2. Просьба указать переменные значащие имена. Человек, который будет отлаживать этот код, когда вы уйдете, будет страшным, пытаясь понять, каковы ваши намерения.
1

Reorder вашей линии, как это:

  int xnbb; 
      if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y))) 
      { 
       var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y)); 
       xnbb = 1; 
      } 
      else 
      { 
       xnbb = 0; 
      } 
      var rk = xnbb + ... 

Вы должны объявить переменную xnbb в сферу, где все обычаи этих переменных содержатся. В этом случае он находится внутри вашего цикла for.

0

Переменные, объявленные внутри блока, доступны только внутри этого блока. Вы можете найти более подробную информацию об области переменных на MSDN documentation.

Таким образом, чтобы ваша переменная была доступна в нескольких областях, вам необходимо объявить эту переменную в области, которая является предком для обеих областей в обсуждении.

В вашем случае, вы можете объявить переменную право xnbb до if заявления, как в вашем случае for сфера включает в себя if один, так что предок я говорил выше:

int xnbb = 0; 
if (xr_arr[y] > Math.Exp(Math.Log(2) * (-y))) 
{ 
    var xn = xr_arr[y] - Math.Exp(Math.Log(2) * (-y)); 
    int xnbb = 1; 
} 
else 
{ 
    xnbb = 0; 
} 
Смежные вопросы