c# (?:)语法

           return  a == 1 ? 2 : 3;  //返回的2
           return  a = 1 ? 2 : 3;//在c#中程序会报错

由此上述两个表达式,我整理了一下关于这个运算符相关的点
////////////////////////////////////////////////////////////////////////////////////

由于本人之前是编写一点点c++的代码,所以去翻了翻c++的书籍和编写了一些测代码,也编写了一些c#的测试代码作比较

           return  a == 1 ? 2 : 3;  //返回的2
           return  a = 1 ? 2 : 3;//在c#中程序会报错

对一些编程的细节概念其实不是很熟,所以今天翻了翻。。。

(1) a == 1 ? 2 : 3 在这行代码里面 其实包含了两个运算符 ==?: 这两个是有优先级的,所以顺序是这样的

 if(a==1)//a==1,返回值true
 {return 2}//整个表达式返回2

(2)a = 1 ? 2 : 3 在这行代码里面 =?: 这两个是有优先级的,先执行?:=

if(1)//1转换成bool类型为true
{return 2}//整个表达式返回2

(3)(a=1)?2 : 3在这行代码里面 () =?: 这三个是有优先级的,先执行()?:

if(a=1)//赋值运算符返回的时a的引用,则`()`里面还是`1`,转换成`bool`为`true`
{return 2}//整个表达式返回2

!!上述代码是在c++环境中进行编写,语法遵循c++,但是c#就有所不同了!!

c#和c++代码对比
(1)c++中

 #include "stdafx.h"
    #include<iostream>
    int _tmain(int argc, _TCHAR* argv[])
    {
    	using namespace std;
    	if(1) {cout<<"1-ok"<<endl;}//pass
    	if(0) {cout<<"0-ok"<<endl;}//fail
    	if(-1){cout<<"-1-ok"<<endl;}//pass
    }

在这里插入图片描述

(2)在c#中
在这里插入图片描述

在这里插入图片描述

所以c#中时不可以将int型转换成bool型的

上述为个人理解,批判浏览

猜你喜欢

转载自blog.csdn.net/qq_37627370/article/details/83420324