1. 程式人生 > >c# (?:)語法

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型的

上述為個人理解,批判瀏覽