为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
眼眸繁星 2022-07-23 17:19:01
我最近开始学习 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 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

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


string a = null;


    if((a = GetValue()) != null){

    DoSomething();

    }

分配除 null 以外的其他值并检查它是否为布尔表达式是一种很好的语法。尽管请记住,最外面的括号总是要求一个布尔表达式。


查看完整回答
反对 回复 2022-07-23
?
MM们

TA贡献1886条经验 获得超2个赞

但我想知道是否有任何情况下 if 采用除 bool 以外的任何值。


不,不,有点像


if-else(C# 参考)


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


以下仅适用,因为结果是布尔值


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(故事结束)


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


?int bob = null


if(bob > 3) { ... }

其他资源

来自C# 规范

12.4.8 提升运营商

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

    • 如果操作数类型都是不可为空的值类型并且结果类型是 bool,则存在运算符的提升形式。提升的形式是通过添加单个 ? 每个操作数类型的修饰符。提升的运算符认为两个空值相等,一个空值不等于任何非空值。如果两个操作数都不为空,则提升的运算符解开操作数并应用底层运算符来产生 bool 结果。

  • 对于关系运算符< > <= >=

    • 如果操作数类型都是不可为空的值类型并且结果类型是 bool,则存在运算符的提升形式。提升的形式是通过添加单个 ? 每个操作数类型的修饰符。如果一个或两个操作数为空,则提升的运算符产生值 false。否则,提升的运算符会展开操作数并应用底层运算符来生成 bool 结果。


查看完整回答
反对 回复 2022-07-23
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号