Принимает ли оператор присваивания в c # любое другое значение, кроме bool в любом сценарии? - PullRequest
0 голосов
/ 16 января 2019

Я недавно начал изучать c # и узнал, что условие if принимает только логическое значение для оператора присваивания, как в приведенном ниже коде. Но я хотел знать, есть ли сценарий, где if принимает любое значение, кроме bool.

Я попытался изменить тип 'a' на char, но это дало мне ошибку во время компиляции.

Console.Write("Enter a character: ");
char c = (char)Console.Read();
bool a;
if (a=Char.IsLetter(c))
{
    if (a=Char.IsLower(c))
    {
        Console.WriteLine("The character is lowercase.");
    }
    else
    {
        Console.WriteLine("The character is uppercase.");
    }
}
else
{
    Console.WriteLine("Not a character");
}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Иногда я использовал выражение вроде этого: -

string a = null;

    if((a = GetValue()) != null){
    DoSomething();
    }

Это хороший синтаксис для назначения других значений, отличных от нуля, и проверки его на наличие логического выражения.Хотя имейте в виду, что крайняя скобка всегда будет запрашивать логическое выражение.

0 голосов
/ 16 января 2019

Но я хотел бы знать, есть ли сценарий, где если принимает какое-либо значение кроме bool.

Нет, нет и вроде

if-else (C # Reference)

Оператор if определяет, какой оператор выполнять на основе значения логическое выражение n

Следующее работает только потому, что результатом является логическое значение

if (a=Char.IsLower(c))

это эквивалентно

a=Char.IsLower(c);
if (a)

То же, что и следующие a и b становятся результатом Char.IsLower(c)

bool a = false;
bool b = false; 
a = b = Char.IsLower(c)

... Результат должен быть равен bool (конец истории)

Предостережение (если вы хотите так его называть) допускает обнуление и Поднятые операторы . Поднятые операторы - это операторы, которые работают над обнуляемыми типами, «поднимая» операторы, которые уже существуют в ненулевой форме, однако они все равно должны приравниваться к логическому выражению.

?int bob = null

if(bob > 3) { ... }

Дополнительные ресурсы

Из C # спецификации

12.4.8 Поднятые операторы

  • Для операторов равенства == !=

    • поднятая форма оператора существует, если оба типа операндов являются необнуляемыми типами значений и если тип результата - bool. Поднял Форма создается путем добавления одного? модификатор для каждого операнда тип. Поднятый оператор считает два нулевых значения равными, а нулевое значение, не равное любому ненулевому значению. Если оба операнда не равны нулю, Поднятый оператор разворачивает операнды и применяет базовый оператор для получения результата bool.
  • Для реляционных операторов < > <= >=

    • Поднятая форма оператора существует, если оба типа операндов являются необнуляемыми типами значений и если тип результата - bool. Поднял Форма создается путем добавления одного? модификатор для каждого операнда тип. Поднятый оператор выдает значение false, если один или оба операнды нулевые. В противном случае поднятый оператор разворачивает операнды и применяет базовый оператор для получения результата bool.
...