Как определить, была ли инициализирована переменная в C#?

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

Вот пример кода (который, конечно, не компилируется), чтобы описать мою проблему:

class test
{
     int[] val1;
     string val2;

     static bool somefunction(test x, test y)
     {
         dosomestuff()

         test result;

         while(result is nothing)
         {
              if(somecondition){result=new test(something);}
         }
     }
}

Проблема, которая у меня есть, заключается в следующей строке:

while(result is nothing)

Это синтаксис VB, который, конечно же, не принимается компилятором C#. Может ли кто-нибудь сказать мне, как решить проблему?


person niklasfi    schedule 28.07.2009    source источник
comment
Совсем не глупый вопрос. Я столкнулся с этим, когда перешел с VB.NET на C#.   -  person Mike Cole    schedule 28.07.2009


Ответы (6)


Синтаксис, который вы ищете:

while (result == null)

Вы также должны установить result = null; для начала также

person Colin Mackay    schedule 28.07.2009
comment
Это не работает с типами значений. См. мой ответ ниже. для исправлений. - person Aaron Thoma; 16.03.2012
comment
Да, но вопрос был не в этом. Вопрос касался именно class с именем test, который не является типом значения. - person Colin Mackay; 11.10.2013
comment
(Согласен, ваш ответ правильный и полный в отношении примера спрашивающего. Я счел полезным указать, что он не является полным в отношении более общего названия вопроса, что мне кажется далеко не очевидным, но имеет отношение к другим людям сталкиваюсь с этим вопросом) - person Aaron Thoma; 13.10.2013
comment
Я объявляю класс, но не инициализирую его. тогда, если попытаться проверить, если ( myClass == null ) visual sutdio вообще не позволит мне запустить эту программу. Ошибка - использование беззнаковой локальной переменной - person MindRoasterMir; 28.04.2020

while (result ==null )

если ты это имеешь в виду

person satyajit    schedule 28.07.2009

Хотя у вас есть ответ, которым вы довольны, за ним скрывается что-то интересное или полезное.

Существует разница между C# и VB.NET. В VB.NET вы можете написать:

Dim b as Boolean

А на С# можно написать:

bool b;

Они немного разные. В VB.NET b было присвоено значение false (другими словами, оно уже было инициализировано). В C# b не имеет значения (не инициализируется). C# прилагает много усилий, чтобы убедиться, что вы не можете проверить значение переменной, которая никогда не была инициализирована.

Таким образом, вы не проверяете, инициализирована ли переменная. В VB.NET нет такой вещи, как неинициализированная переменная. В C# невозможно получить значение неинициализированной переменной, чтобы с чем-то сравнить.

Вы проверяете, инициализирована ли переменная как null или Nothing.

person Daniel Earwicker    schedule 28.07.2009

while(result == null)

Эквивалент ничего в C# равен нулю.

person Supertux    schedule 28.07.2009

person    schedule
comment
Отличный намек с ? Тип значения. - person boutta; 12.02.2014

person    schedule
comment
Компилятор выдает для этого следующее исключение: Использование неназначенной локальной переменной 'test' - person niklasfi; 28.07.2009
comment
Нет, так как я не сделал, как предложил Колин Маккей, установить test=null в первую очередь. - person niklasfi; 28.07.2009
comment
OK. Рад, что ты смог разобраться. - person Robert Harvey; 28.07.2009