Инициализация переменной

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
а если ничего не менять, а только инициализировать при объявлении
string name = string.Empty;
то тот же код работает нормально... что ему надо, але
спасибо
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
а если ничего не менять, а только инициализировать при объявлении
string name = string.Empty;
то тот же код работает нормально... что ему надо, але
спасибо
в первом случае объект в памяти не создается, память не выделяется. поэтому и ошибка. во втором случае объект создается и в память записывается значение равное string.Empty
 
  • Спасибо
Реакции: elakeri

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
в первом случае объект в памяти не создается, память не выделяется. поэтому и ошибка. во втором случае объект создается и в память записывается значение равное string.Empty
не., в конце кода вывожу переменную в лог, там значение, которое записывается в процессе шаба, а не string.Empty
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
не., в конце кода вывожу переменную в лог, там значение, которое записывается в процессе шаба, а не string.Empty
компилятору виднее в каких логических ответвлениях переменная не будет заполнена значениями :-)
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
компилятору виднее в каких логических ответвлениях переменная не будет заполнена значениями :-)
Ну так код не меняется же, только при просто объявлении он ругается, а приобьявлении и инициализации все сразу работает
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 369
Благодарностей
3 293
Баллы
113

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
В том то и дело, что он так не требует.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
В том то и дело, что он так не требует.
не требует инициализации переменных бейсик, а в С# немного другие правила.
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Да не рассказывайте..
String gvn;
gvn = "пиз.. Обманщики" ;
Rerurn gvn;
Работает)
 

dafaroff

Client
Регистрация
03.05.2011
Сообщения
76
Благодарностей
136
Баллы
33
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
а если ничего не менять, а только инициализировать при объявлении
string name = string.Empty;
то тот же код работает нормально... что ему надо, але
спасибо
Скорее всего, ты объявляешь переменную в фигурных скобках.
Если переменная указывается в фигурных скобках, то она существует только в фигурных скобках.
Например
C#:
try{
    string val = "переменная";
}catch{}
return val;
вернет ошибку.
Чтобы этого избежать, нужно объявлять переменную за пределами скобок, например так
C#:
string val = "";
try{
    val = "переменная";
}catch{}
return val;
По ошибкам вот еще почитай
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
:dy:
просто не вижу смысла тут больше что то писать. да и компилятору c# тоже в принципе по барабану, знает ли кто о его правилах или нет *HAHA*
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 760
Благодарностей
2 399
Баллы
113
:dy:
просто не вижу смысла тут больше что то писать. да и компилятору c# тоже в принципе по барабану, знает ли кто о его правилах или нет *HAHA*
На сколько я понял проблема в том, что пользователь пытается использовать переменную не создав её.
Пример:
C#:
{
text = "text";
}
return text;
Фишка в том, что если не будет строки создания переменной перед фигурными скобками - то будет ошибка.
Раньше код такой как ниже в примере не работал - сейчас проверил - работает.
C#:
string text;
{
text = "text";
}
return text;
Зеннопостер ругался на то, что мол нельзя использовать переменную если не присвоить ей значение.
Видимо на новых версиях данная проблема пропала (и изначально, я думал что вопрос как раз состоит в том, почему нельзя создать переменную, но не присваивать ей значение - но оказывается что сейчас уже так можно).
С тех времён, как это ещё не работало - у меня сложилась привычка всегда присваивать значение сразу при объявлении, не смотря на то, что C# позволял и до этого создавать переменные без присвоения значения.
C#:
string text = string.Empty;
{
text="text";
}
return text;
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
очень развернутый ответ, который в кратце я описал в 4-м посте :-)
если бы человеку нужна была бы информация, то он бы прочитал то что есть по ссылке и узнал бы что там есть вот такой интересный раздел
но походу цель в данном посте не получение информации, а тупо эмоциональное выплескивание своего недовольства. ну что греха таить , у меня тоже такие моменты бывают :-)
 
  • Спасибо
Реакции: elakeri

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
очень развернутый ответ, который в кратце я описал в 4-м посте :-)
если бы человеку нужна была бы информация, то он бы прочитал то что есть по ссылке и узнал бы что там есть вот такой интересный раздел
но походу цель в данном посте не получение информации, а тупо эмоциональное выплескивание своего недовольства. ну что греха таить , у меня тоже такие моменты бывают :-)
Я вам ещё раз говорю, переменная объявлена в начале кода, не в блоке кода какой нить функции, а в начале, и видна всем.., присваивание значения идёт внутри кода..
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 760
Благодарностей
2 399
Баллы
113
Я вам ещё раз говорю, переменная объявлена в начале кода, не в блоке кода какой нить функции, а в начале, и видна всем.., присваивание значения идёт внутри кода..
Вы писали:
member: 27732 сказал(а):
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
Обратите внимание, что вначале определена переменная с одним именем, а шаблон ругается на переменную с другим именем.
Может эта другая переменная не создана?

И второй момент, если переменная создана, например так:
Код:
string name;
if(1==2) name = "Hello";
return name;
То шаблон выйдет по ошибке, которая Вами была указана - так как условие такое никогда не выполнится по успеху - а значит переменной никогда не будет присвоено значение, а Зеннопостер не сможет в строковую переменную проекта вернуть значение null из-за чего и ругается, что мол что ты делаешь, присвой значение переменной, и всё будет ок.
 
Последнее редактирование:
  • Спасибо
Реакции: elakeri

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Вы писали:

Обратите внимание, что вначале определена переменная с одним именем, а шаблон ругается на переменную с другим именем.
Может эта другая переменная не создана?
Нет, это я когда писал сообщение её изменил, что бы не вдаваться в подробности)), а ошибку прост скопировал с лога
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 760
Благодарностей
2 399
Баллы
113
Нет, это я когда писал сообщение её изменил, что бы не вдаваться в подробности)), а ошибку прост скопировал с лога
Я дополнил предыдущий ответ.
Судя с скриншота в личной переписки выглядит так, что в switch не во всех ветках данной переменной присваивается значение (каптча мол не всегда есть).
Из-за этого, если такой случай наступил - переменная не получает никакое значение - из-за чего и происходит ошибка.
Чтобы не тратить время - просто создавайте переменную сразу присваивая ей какое-то значение (и тогда не придётся думать о тех вариантах, когда она может оказаться с не присвоенным значением).
 
  • Спасибо
Реакции: elakeri

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
ТС в шпионов играет, а вам в экстрасенсов приходится играть. Оно вам надо?
 
  • Спасибо
Реакции: elakeri

dafaroff

Client
Регистрация
03.05.2011
Сообщения
76
Благодарностей
136
Баллы
33
Я вам ещё раз говорю, переменная объявлена в начале кода, не в блоке кода какой нить функции, а в начале, и видна всем.., присваивание значения идёт внутри кода..
Без примера кода, в котором появляется ошибка, тяжело что-либо сказать.
Скорее всего, вероятен вариант, что переменной ничего не будет присвоено, и компилятор на это ругается.
Следующий код это демонстрирует.
C#:
string t;
bool b = true;
if(b)
{
    t = "переменная";
    return t;
}else
{
    return t;
}
 
  • Спасибо
Реакции: elakeri

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 760
Благодарностей
2 399
Баллы
113
И да, можно всё таки решить эту проблему, если использовать переменную проекта, например - отработает без ошибки (если принципиально не нужно писать string text = string.Empty;-).
Код:
if(1==2) project.Variables["date"].Value = "123";
return project.Variables["date"].Value;
ТС в шпионов играет, а вам в экстрасенсов приходится играть. Оно вам надо?
Согласен. Пора прекращать - уже объяснили как могли...

Без примера кода, в котором появляется ошибка, тяжело что-либо сказать.
Скорее всего, вероятен вариант, что переменной ничего не будет присвоено, и компилятор на это ругается.
Следующий код это демонстрирует.
C#:
string t;
bool b = true;
if(b)
{
    t = "переменная";
    return t;
}else
{
    return t;
}
Вполне логичный исход - ведь, null это не строка, а переменные Зеннопостера хранят строки (либо типы данных, которые можно привести к строкам).
 
  • Спасибо
Реакции: elakeri

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
да в самом деле, задолбал уже автор :dy:
даже код сюда не выложил. вся инфа уже разжевана. пусть сам разбирается дальше.
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Без примера кода, в котором появляется ошибка, тяжело что-либо сказать.
Скорее всего, вероятен вариант, что переменной ничего не будет присвоено, и компилятор на это ругается.
Следующий код это демонстрирует.
C#:
string t;
bool b = true;
if(b)
{
    t = "переменная";
    return t;
}else
{
    return t;
}
Ну вот очень похоже.., тут t не присваивается значение "переменная"?.. Тогда я ничего не монимаю.., в шпиона не играю, прост думал будет коротенький ясный ответ, я ж новичок, код не могу ща выложить, с телефона прост.. Приеду, сразу
 

dafaroff

Client
Регистрация
03.05.2011
Сообщения
76
Благодарностей
136
Баллы
33
Ну вот очень похоже.., тут t не присваивается значение "переменная"?.. Тогда я ничего не монимаю.., в шпиона не играю, прост думал будет коротенький ясный ответ, я ж новичок, код не могу ща выложить, с телефона прост.. Приеду, сразу
Компилятор не знает, что ему нужно будет вернуть, если выход будет через else, поэтому ругается.
Из-за этого, нужно присвоить любое значение переменной до входа в условие.
Как еще проще объяснить - я не знаю.
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
компиляторы сейчас умные, они по логике смотрят, если есть возможность использования неинициализированной переменной, то не даст скомпилить код


Вот мне ответили.., в другом форуме.., считаю вопрос закрыт.., действительно, есть возможность, что переменной ничего не присвоит.., в моем случае ей всегда присваивалось бы, но теоретически могла остаться не тронутой.. Спасибо всем, извиняюсь, кого задел, отдельно dufaroff, респект
 

elakeri

Client
Регистрация
23.07.2018
Сообщения
199
Благодарностей
10
Баллы
18
Я жиж новичок.., не бейте сильно
 

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