c# (?:)語法
阿新 • • 發佈:2018-11-02
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型的
上述為個人理解,批判瀏覽