在任何情况下,c# 中的赋值运算符是否采用除 bool 之外的任何其他值?

Does the assignment operator in c# take any other value other than bool in any scenario?

提问人:Akarsha Rao 提问时间:1/16/2019 更新时间:1/16/2019 访问量:339

问:

我最近开始学习 c#,并了解到 if 条件只接受赋值运算符的布尔值,如下面的代码所示。但是我想知道是否有任何情况,if 采用布尔以外的任何值。

我尝试将“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");
}
C# IF-语句 赋值运算符

评论

0赞 Chetan 1/16/2019
你根本不需要变量...你只需要做aif(Char.IsLetter(c))
0赞 Akarsha Rao 1/16/2019
@ChetanRanpariya是的,我放置的那个“a”是为了看看我是否可以将其作为字符变量并检查。

答:

1赞 TheGeneral 1/16/2019 #1

但是我想知道是否有任何情况,如果具有任何值 除了布尔。

不,不,有点

if-else(C# 参考)

if 语句根据值标识要运行的语句 的布尔表达式n

以下方法之所以有效,是因为结果是布尔值

if (a=Char.IsLower(c))

它相当于

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

与以下相同并成为结果abChar.IsLower(c)

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

...结果必须等于 bool(故事结束)

警告(如果你想这样称呼它)是可空的和 Lifted 运算符。Lifted 运算符是通过“提升”不可为 null 形式上已经存在的运算符来处理可为 null 的类型,但它仍然必须等同于布尔表达式。

?int bob = null

if(bob > 3) { ... }

其他资源

C# 规范

12.4.8 吊装操作员

  • 对于相等运算符== !=

    • 如果操作数类型都是不可为 null 的值类型,并且结果类型是 bool,则存在运算符的提升形式。升降机 表单是通过添加一个 ?每个操作数的修饰符 类型。提升运算符认为两个 null 值相等,并且 null 值不等于任何非 null 值。如果两个操作数都为非 null,则 lifted 运算符解开操作数并应用底层 运算符来生成布尔值结果。
  • 对于关系运算符< > <= >=

    • 如果操作数类型都是不可为 null 的值类型,并且结果类型是 bool,则存在运算符的提升形式。升降机 表单是通过添加一个 ?每个操作数的修饰符 类型。如果一个或两个,则 lifted 运算符生成值 false 操作数为 null。否则,提升运算符将解开操作数 并应用基础运算符来生成布尔结果。
1赞 taimur alam 1/16/2019 #2

我有时会使用这样的表达方式:-

string a = null;

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

分配除 null 以外的其他值并检查它是否有布尔表达式是一个很好的语法。但请记住,最外层的括号将始终要求布尔表达式。