Почему оператор c# «&&» выдает ошибку «не может применяться к операндам типа 'bool' и 'int'» - PullRequest
0 голосов
/ 07 августа 2020

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

        int age = 20;
        int score = 49;
        int crazy = 100;
        if (age = 20 && score  < 50 || score > 95) {
            Console.WriteLine("Welcome");     }

Вот ошибка: ошибка CS0019: оператор '&&' не может применяться к операндам типа int и bool

Может ли кто-нибудь из этого замечательного сообщества помочь? Спасибо!

1 Ответ

0 голосов
/ 07 августа 2020

Здесь следует отметить, что когда C# выполняет присвоение (помещает значение в переменную), он также возвращает значение, которое было присвоено. Это:

age = 20

Возвращает значение, 20

Вы можете использовать это в другом назначении:

score = age = 20;

Возраст равен 20, потому что мы присвоили ему значение и он вернул 20. Оценка также равна 20, потому что мы присвоили ему возвращаемое значение (age = 20). Присвоение (результат присвоения возраста) баллов также вернуло значение ... и мы могли бы go так всегда:

a=b=c=d=e=f...=x=y=z=20; //all 26 variables now have a value of 20 

Мы можем рассматривать возвращаемые значения как элементы суммы, как и любые другие:

score = (age = 20) + 1;

Присваивает 20 возрасту и 21 баллу и возвращает 21

Мы можем изменять типы, точно так же, как мы можем сказать myString = 20.ToString() (да, вы можете вызывать методы для константы так же, как вы можете для переменной), мы можем сказать это:

myString = (score = (age = 20) + 1).ToString();

Назначает 20 to age, 21 to score затем превращает возвращенный 21 в строку и присваивает "21" myString

-

Хорошо, хватит этой глупости ... но, надеюсь, вы понимаете, почему

if(age = 20 && score < 50)

Выдает ошибку. age установлено в 20, возвращается 20 и && редактируется с (score <50), операцией, которая возвращает логическое значение. Это означает, что вы написали это так: </p>

age = 20;
if(20 && score < 50)

Какой простой не работает. Хорошая работа, это не JavaScript.

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

.. просто помните, что присваивания тоже приводят к значениям, поэтому этот сумасшедший вид l oop работает:

while(null != x = stream.Read()) //loop while Read() doesn't return null
{
  //use x, which certainly has a non null value 
}

Я бы проявил осторожность при использовании составного присваивания заявления -и-сравнение - они намного менее читабельны, чем перечисление этих вещей шаг за шагом:

for(x = stream.Read(); x != null; x = stream.Read())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...