Область видимости переменных

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Только начинаю осваивать C# и многие моменты пока совершенно не понятны. Подскажите пожалуйста по области видимости переменных
Код:
  if (parserRegex.IsMatch(strCurrentVariant)) {
     strCurrentSubVariant = parserMatch.Value;
     
     
     subresult = strCurrentSubVariant.Split(new Char [] {';' });
     if (subresult.Length > 0){
       random = rnd.Next(0, subresult.Length);
       
     }
     
     return random;
     
     //project.SendErrorToLog("info", true); //Пример записи в лог
     //return strCurrentVariant.Replace("{" + strCurrentSubVariant + "}",subresult[random]);
   }
В этом коде переменная random видна вне констукции if, в которой она назначается, а переменная strCurrentSubVariant - не видна, если я двигаю закрывающую скобку вот так:
Код:
   if (parserRegex.IsMatch(strCurrentVariant)) {
     strCurrentSubVariant = parserMatch.Value;
   }
Я получаю ошибку "Использование локальной переменной "strCurrentSubVariant", которой не присвоено значение". [Строка: 31; Cтолбец: 14]

Соответственно я пытаюсь сделать do {} while цикл, по результатам которого вывести переменную через return, но почему-то вижу эту переменную только внутри блока {}!
 

KirillOFF

Client
Регистрация
18.12.2010
Сообщения
1 127
Благодарностей
517
Баллы
113
Вы сами ответили на свой вопрос в последнем абзаце. Это не ошибка.
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
ок, в таком случае почему я могу обратиться к переменной random вне блока if?
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Нашёл ответ самостоятельно. При объявлении переменных нужно сразу присваивать им значения.

Этот вариант кода работает:
Код:
int a = 10;
string b = "";
if (a > 5) {
   b="blablabla";
}
return a + "--" + b;
А этот - не работает:
Код:
int a = 10;
string b;
if (a > 5) {
   b="blablabla";
}
return a + "--" + b;
 

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Попробую апнуть тему. Разъясните пожалуйста, обязательно ли инициализировать переменные значениями при создании, чтобы они были видны во всех блоках кода? Я пытаюсь разбить весь код сниппета на try-catch блоки. Соответственно даже если я объявляю переменную неявно в начале сниппета - в try-catch блоке она не видна. Приходится объявлять переменные вот так:
Код:
string strCatalogSource="";
string strURL="", strIsHighlight="", strIsVIP="", strIsPremium="", strQPhotos;
string strPrice="", strID="", strTitle="", strContactName="", strShopLink="", strOrgContact="", strCity="", strMetro="", strDescription="", strViews="", strRenewDate="", strAddDate="";
string strGraphSource="", str2WeeksViews=""; int intSum=0;
string strURL_rx="", strIsHighlight_rx="", strIsVIP_rx="", strIsPremium_rx="", strQPhotos_rx="", strGraphSource_rx="", strPrice_rx="", strID_rx="", strTitle_rx="", strContactName_rx="", strShopLink_rx="", strOrgContact_rx="", strCity_rx="", strMetro_rx="", strDescription_rx="", strViews_rx="", strRenewDate_rx="", strAddDate_rx="";
И чёрт бы с ним, вот только с объектными переменными та же беда, но объявлять их заранее я могу только так:
Код:
Tab AdvertTab;
Document AdvertDoc;
...так как не знаю, какой URL будет открываться. А выносить явное объявление этих объектов из соответствующих try-catch блоков тоже не хочется. Как быть?
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
Document AdvertDoc = null;
Tab AdvertTab = null;
 
  • Спасибо
Реакции: sibbora

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)