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

  • Автор темы Автор темы elakeri
  • Дата начала Дата начала

elakeri

Client
Регистрация
23.07.2018
Сообщения
203
Реакции
10
Баллы
18
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
а если ничего не менять, а только инициализировать при объявлении
string name = string.Empty;
то тот же код работает нормально... что ему надо, але
спасибо
 
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
а если ничего не менять, а только инициализировать при объявлении
string name = string.Empty;
то тот же код работает нормально... что ему надо, але
спасибо
в первом случае объект в памяти не создается, память не выделяется. поэтому и ошибка. во втором случае объект создается и в память записывается значение равное string.Empty
 
  • Спасибо
Реакции: elakeri
в первом случае объект в памяти не создается, память не выделяется. поэтому и ошибка. во втором случае объект создается и в память записывается значение равное string.Empty
не., в конце кода вывожу переменную в лог, там значение, которое записывается в процессе шаба, а не string.Empty
 
не., в конце кода вывожу переменную в лог, там значение, которое записывается в процессе шаба, а не string.Empty
компилятору виднее в каких логических ответвлениях переменная не будет заполнена значениями :)
 
компилятору виднее в каких логических ответвлениях переменная не будет заполнена значениями :-)
Ну так код не меняется же, только при просто объявлении он ругается, а приобьявлении и инициализации все сразу работает
 
В том то и дело, что он так не требует.
 
В том то и дело, что он так не требует.
не требует инициализации переменных бейсик, а в С# немного другие правила.
 
Да не рассказывайте..
String gvn;
gvn = "пиз.. Обманщики" ;
Rerurn gvn;
Работает)
 
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
а если ничего не менять, а только инициализировать при объявлении
string name = string.Empty;
то тот же код работает нормально... что ему надо, але
спасибо
Скорее всего, ты объявляешь переменную в фигурных скобках.
Если переменная указывается в фигурных скобках, то она существует только в фигурных скобках.
Например
C#:
Развернуть Свернуть Копировать
try{
    string val = "переменная";
}catch{}
return val;
вернет ошибку.
Чтобы этого избежать, нужно объявлять переменную за пределами скобок, например так
C#:
Развернуть Свернуть Копировать
string val = "";
try{
    val = "переменная";
}catch{}
return val;
По ошибкам вот еще почитай
 
Последнее редактирование:
:dy:
просто не вижу смысла тут больше что то писать. да и компилятору c# тоже в принципе по барабану, знает ли кто о его правилах или нет *HAHA*
 
: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;
 
очень развернутый ответ, который в кратце я описал в 4-м посте :)
если бы человеку нужна была бы информация, то он бы прочитал то что есть по ссылке и узнал бы что там есть вот такой интересный раздел
но походу цель в данном посте не получение информации, а тупо эмоциональное выплескивание своего недовольства. ну что греха таить , у меня тоже такие моменты бывают :)
 
  • Спасибо
Реакции: elakeri
очень развернутый ответ, который в кратце я описал в 4-м посте :-)
если бы человеку нужна была бы информация, то он бы прочитал то что есть по ссылке и узнал бы что там есть вот такой интересный раздел
но походу цель в данном посте не получение информации, а тупо эмоциональное выплескивание своего недовольства. ну что греха таить , у меня тоже такие моменты бывают :-)
Я вам ещё раз говорю, переменная объявлена в начале кода, не в блоке кода какой нить функции, а в начале, и видна всем.., присваивание значения идёт внутри кода..
 
Я вам ещё раз говорю, переменная объявлена в начале кода, не в блоке кода какой нить функции, а в начале, и видна всем.., присваивание значения идёт внутри кода..
Вы писали:
member: 27732 написал(а):
Кто нить может объяснить логику, или по каким таким правилам, если объявить переменную типа
string name;
потом в коде присвоить ей какое то значение, то при попытке использования этой переменной выдает ошибку
CS0165" "Использование локальной переменной "captcha_name", которой не присвоено значение".
Обратите внимание, что вначале определена переменная с одним именем, а шаблон ругается на переменную с другим именем.
Может эта другая переменная не создана?

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

Обратите внимание, что вначале определена переменная с одним именем, а шаблон ругается на переменную с другим именем.
Может эта другая переменная не создана?
Нет, это я когда писал сообщение её изменил, что бы не вдаваться в подробности)), а ошибку прост скопировал с лога
 
Нет, это я когда писал сообщение её изменил, что бы не вдаваться в подробности)), а ошибку прост скопировал с лога
Я дополнил предыдущий ответ.
Судя с скриншота в личной переписки выглядит так, что в switch не во всех ветках данной переменной присваивается значение (каптча мол не всегда есть).
Из-за этого, если такой случай наступил - переменная не получает никакое значение - из-за чего и происходит ошибка.
Чтобы не тратить время - просто создавайте переменную сразу присваивая ей какое-то значение (и тогда не придётся думать о тех вариантах, когда она может оказаться с не присвоенным значением).
 
  • Спасибо
Реакции: elakeri
Я вам ещё раз говорю, переменная объявлена в начале кода, не в блоке кода какой нить функции, а в начале, и видна всем.., присваивание значения идёт внутри кода..
Без примера кода, в котором появляется ошибка, тяжело что-либо сказать.
Скорее всего, вероятен вариант, что переменной ничего не будет присвоено, и компилятор на это ругается.
Следующий код это демонстрирует.
C#:
Развернуть Свернуть Копировать
string t;
bool b = true;
if(b)
{
    t = "переменная";
    return t;
}else
{
    return t;
}
 
  • Спасибо
Реакции: elakeri
И да, можно всё таки решить эту проблему, если использовать переменную проекта, например - отработает без ошибки (если принципиально не нужно писать 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
да в самом деле, задолбал уже автор :dy:
даже код сюда не выложил. вся инфа уже разжевана. пусть сам разбирается дальше.
 
Без примера кода, в котором появляется ошибка, тяжело что-либо сказать.
Скорее всего, вероятен вариант, что переменной ничего не будет присвоено, и компилятор на это ругается.
Следующий код это демонстрирует.
C#:
Развернуть Свернуть Копировать
string t;
bool b = true;
if(b)
{
    t = "переменная";
    return t;
}else
{
    return t;
}
Ну вот очень похоже.., тут t не присваивается значение "переменная"?.. Тогда я ничего не монимаю.., в шпиона не играю, прост думал будет коротенький ясный ответ, я ж новичок, код не могу ща выложить, с телефона прост.. Приеду, сразу
 
Ну вот очень похоже.., тут t не присваивается значение "переменная"?.. Тогда я ничего не монимаю.., в шпиона не играю, прост думал будет коротенький ясный ответ, я ж новичок, код не могу ща выложить, с телефона прост.. Приеду, сразу
Компилятор не знает, что ему нужно будет вернуть, если выход будет через else, поэтому ругается.
Из-за этого, нужно присвоить любое значение переменной до входа в условие.
Как еще проще объяснить - я не знаю.
 
компиляторы сейчас умные, они по логике смотрят, если есть возможность использования неинициализированной переменной, то не даст скомпилить код


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

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