C 操作符 和

2022-08-15 03:42:14 字數 2988 閱讀 6456

先看如下**:

stringstrparam = request.params["param"];

if( strparam==null)

stringstrparam=

request.params["param"] ==null?"": request.params["param"];

你發現,儘管實現的同乙個功能,但第二段**要比第一段**是不是更簡潔。

這裡的」 ?:「就是乙個三元的操作符。利用這個三元操作符也稱條件操作符,

就很簡單的把乙個if語句給實現了。

在使用條件操作符的時候要注意,假定條件表示式是這樣 x?y:z,

表示式型別的只能是使y 和z的變數型別之一,換句話說就是 y和z的變數型別決定這個條件表示式的型別,

無論y和z是同一型別,還是y和z不是同一型別。 如果表示式的型別和賦值型別不一致,發生編譯時錯誤 ,例如:如果你想實現如下**:

stringstrtemp ;

objectobj;

....

if(strtemp =="")

obj   =   dbnull.value;

else

obj   =   strtemp ;

然後為了簡單,改成下面這種形式:

stringstrtemp;

objectobj = strtemp ==""?dbnull.value:strtemp;

你編譯的時候,會報錯。因為dbnull和string之間沒隱式轉換,修改成如下**就可以了:

objectobj = strtemp ==""? dbnull.value: (object)strtemp;

另外條件操作符是向右關聯的,從左到右進行計算,於是a?b:c?d:e 應理解為 a?b:(c?d:e)。

上面提到了dbnull,在c#2.0裡面實現了nullable資料型別,別小看這個資料型別,其實非常有用,

從此我們就可以放棄對object資料進行ifobject==null)這樣的判斷了。同時你會發現,

在資料庫應用上,資料庫中有的字段允許取空值,在c#世界中引入nullable型別正好與之對應

,從(c#)物件對映到關聯式資料庫物件,或者反過來,轉換都是比較平滑。

為了實現nullable資料型別轉換成non-nullable型資料,就有了乙個這樣的操作符」??(兩個問號)「,雙問號操作符意思是取所賦值??左邊的,如果左邊為null,取所賦值??右邊的,

比如inty = x ?? -1 如果x為空,那麼y的值為-1.

於是這時候就可以把最上面第二段**改成:

stringstrparam= request.params["param"]??"";

嘿嘿,是不是更簡潔了。

另外還有」?(單問號)「修飾符,是system.nullable的縮寫形式,比如int?代表是可空的整形,

例如:int? a = 1 或者int? b=null。nullable型別具有乙個hasvalue的bool型別唯讀屬性,

當nullable型別例項的該屬性為true時,則表示該例項是非空例項,包含乙個已知值value,

hasvalue為false時,訪問value屬性將導致system.invalidoperationexception。

c語言 位操作符和邏輯操作符

按位與 按位或 按位異或 注 他們的運算元必須是整數。兩個整數字元位有假 0 就為假 0 只有全為真 1 就為真 1 舉個例子 老師叫兩個學生來辦公室,說張三與 李四過來,如果只乙個人過去就不滿足老師說的話 為假 必須兩個人都過去 為真 兩個整數字元位只要有真就為真,只有全為假 0 就為假 0 舉個...

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

C 中is和as操作符

在c 語言中進行型別轉換的操作符is和as。is和as都是強制型別轉換,但這兩者有什麼相同之處和不同之處呢?在使用is和as需要注意哪些事項?下面我們從簡單的 示例去 這個簡單的問題。is檢查乙個物件是否相容於指定的型別,並返回乙個boolean值 true或者fasle。注意,is操作符永遠不會丟...