C # логические выражения - PullRequest
0 голосов
/ 07 января 2010

в приведенном ниже примере, какое значение 'foo' будет установлено каждый раз? Я искал в Интернете, но нигде не могу найти ответ:

static void Main(string[] args) {
   static public bool abc = true;
   static public bool foo = (abc = false);
   foo = (abc = true);
}

Ответы [ 4 ]

8 голосов
/ 07 января 2010

false в первый раз и true во второй раз. Помните, что = является оператором присваивания: он присваивает значение второго операнда первому, а затем возвращает это значение. Например:

int foo = 1;
int bar = (foo = 2);

Вторая строка здесь присваивает 2 к foo, затем возвращает 2 другому оператору присваивания, который присваивает 2 строке В конце концов, и foo, и bar имеют значение 2.

Редактировать: Вот почему допустимо связывать операции присваивания; например,

int foo;
int bar;
foo = bar = 2; // Equivalent to foo = (bar = 2);
2 голосов
/ 07 января 2010
  1. abc = true
  2. abc = false. Тогда foo = false
  3. abc = true. Тогда foo = true
2 голосов
/ 07 января 2010

Используйте == вместо = для логических выражений.

0 голосов
/ 07 января 2010

Ваши определения статических переменных должны быть размещены на уровне класса, а не внутри метода. В этом случае инициализаторы будут работать в порядке, определенном в исходном коде.

Это означает, что сначала для abc будет установлено значение true, затем для foo будет установлено значение false, поскольку abc имеет значение true.

...