C中的單問號和雙問號的作用以及使用的場合

2021-03-20 17:07:16 字數 5638 閱讀 9911

1樓:

datetime? taskstartdate 這裡的 ? ,你的理解是對的。

這個?的作用,是讓原本不支援null值的型別,可以取值為null,例如: datetime 和 int 型別,本身是不能=null的,加了?

,就可以=null了。

milestone.istask ?? false,這裡的 ?? 叫做 「null 合併運算子」,它的用法是:

如果此運算子的左邊的值不為 null,就返回左邊的值;否則返回右邊的值。

2樓:小尾巴崽崽

c# 雙問號運算表示式

1、單問號(?)

作用:用於給變數設初化的時候,給變數(int型別)賦為null值,而不是0。

例子:public int a; //預設值為0

public int ?b; //預設值為null

2、雙問號(??)

作用:用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦一個新值,否則跳過。

例子:public int? b; //預設值為null public int isnullorskip()

錯誤例子:

public int b; //預設值為0 public int isnullorskip()

3樓:今天去幹嘛

我們的數學老師貌似很是憐香惜玉。有次上課,一男生遲到了,老師就讓他做一百個俯臥撐,過了一會,一女生也遲到了,但是老師卻說:「剛罰他做一百個俯臥撐,你去數著去」。全班頓時凌亂。

c#問號的作用 10

4樓:冰麟輕武

三元表示式 和 if類似

只不過 if可以判斷後執行語句

三元表示式只能判斷後賦值

三元表示式的符號是 ?(問號)和:(冒號)比如if的式子

string s = null;

if(1>1)

else

可以寫成這樣的三元表示式

string s = (1 > 1)? "對":"錯";

如果表示式 1>1 成立 則s = 對 否則 s = 錯在上面的式子中 ()括號是可有可無的,帶上看的清楚一些

5樓:jim小子

你找下 三元運算子 就會明白的。

表示式a ?b : c

意思是:如果表示式a為真,則整個表示式的值為b,否則值為c。

6樓:狐狸——精靈

只是一個判斷的表示式,三元運算子,左是右非

c#中兩個問號是什麼意思 "??"

7樓:乜書彤

c#中兩個問號(「?」)的作用是判斷「?」左邊的物件是否為null,如果不為null則使用「?」左邊的物件,如果為null則使用「?」右邊的物件。

c#變數定義中含問號代表什麼

8樓:匿名使用者

int本來是一個值型別,不可以賦予空值

但這樣一個問號,就是使得num成為一個可空型別,你後面這樣寫也是可以的了:

num = null

這樣的作用就是有些時候當某些int值無意義,你又不想用0等特殊值來表示。

9樓:一個人『等待

c#變數定義中含問號代表該變數允許為空(null)。

可以為 null 的型別可以表示基礎型別的所有值,另外還可以表示 null 值。 可以為 null 的型別可通過下面兩種方式中的一種宣告:

system.nullablevariable

- 或 -

t? variable

t 是可以為 null 的型別的基礎型別。 t 可以是包括 struct 在內的任何值型別;但不能是引用型別。

-------------------------------------------

可以檢視msdn幫助:「可以為 null 的型別(c# 程式設計指南)」和「使用可以為 null 的型別(c# 程式設計指南)」。

10樓:匿名使用者

1. 可空型別修飾符

例如 int?, datetime?之類的 申明時加?表示值型別也可為空

2. 三元表示式:

例如:x?y:z 表示如果表示式x為true,則返回y;如果x為false,則返回z,有時用來替代簡化if{}else{} 的

11樓:

可空型別修飾符「t?」:可空型別的基礎型別可以是任何非可空值型別或任何具有struct約束的型別引數,但不能是可空型別或引用型別。

例如:int?代表是可空的整形,而int??

則是無效型別。即可空型別可以表示其基礎型別的所有值和一個額外的空值。語法 t?

是system.nullable的縮寫形式。可空型別具有一個hasvalue的bool型別只讀屬性,當可空型別例項的該屬性為true時,則表示該例項是非空例項,包含一個已知值value;hasvalue為false時,訪問value屬性將導致 system.

invalidoperationexception。可空型別t?具有一個型別為t的單個引數的公共建構函式,如new int?

(123)將獲得一個值為123的int?型別例項。從t?

到由t實現的任何介面都存在裝箱轉換,並且從由t實現的任何介面都存在到t?的拆箱轉換。但是任何情況下可空型別都不滿足介面約束,即使基礎型別實現了該特定介面。

12樓:匿名使用者

是可空型別的變數。不過引用型別的變數是無法以這種形式命名變數的。如string?

str = new string();語法是錯誤的。一般情況可空型別在想資料庫中傳參很有用的。因為資料庫中的欄位可能使設定為空型別的。

那麼這時c#中的可空型別(?)有大顯其用了!

13樓:匿名使用者

可為空值,即null

c#中,為什麼在值型別後面加問號

14樓:驚慌夜

int本來是一個值型別,不可以賦予空值 但這樣一個問號,就是使得num成為一個可空型別,你後面這樣寫也是可以的了: num = null 這樣的作用就是有些時候當某些int值無意義,你又不想用0等特殊值來表示。

15樓:

為什麼不用class而要用struct呢?你以前是搞c的吧? c#的結構體

是值型別的,是直接儲存在棧上面的,而不是像class一樣是用引用型別。 值型別變數包含其例項資料,每個變數儲存了其本身的資料拷貝,所以如果值型別允許你**那樣的話,就會出現死迴圈了。 最後,你的**直接用class代替struct,然後去掉那幾個問號,就可以了。

16樓:匿名使用者

int i=null;報錯

int? i=null;通過

我感覺就這一個區別

c#**中的問號是什麼意思

17樓:匿名使用者

引用型別可以使用空引用表示一個不存在的值,而值型別通常不能表示為空。

例如:string str=null;//是正確的。

int i=null;//編譯器將報錯。

為了使值型別也可為空,可空型別出現了,可空型別使用可空型別修飾符?來表示,表現形式為t?。

例:int?表示是可空的整形,datetime?表示為可空的時間。

int? i=null;//表示可空

t?其實是system.nullable(泛型結構)的縮寫形式,也就意味著當你用到t?時編譯器在編譯時會把t?編譯成system.nullable的形式,

例如:int?,編譯後便是system.nullable的形式。

語法為:條件表示式?表示式1:表示式2;

該操作首先求出條件表示式的值(bool型別),為true時呼叫表示式1,為flase時呼叫表示式2。

其邏輯為:"如果為真執行第一個,否則執行第二個。"

例:test ? expression1 : expression2

test 任何 boolean 表示式。

expression1 test 為 true 時返回的表示式。可能是逗點表示式。

expression2 test 為 false 時返回的表示式。可能是逗點表示式。

例如:string prm1="4";

string prm2="5";

string prm3 = prm1==prm2?"yes":"no" // 此時prm3值為"no".

空合併運算子 (null coalescing operator) ??

用於定義可空型別和引用型別的預設值。如果此運算子的左運算元不為 null,則此運算子將返回左運算元;否則返回右運算元。

例:a??b 如果 a 為非空,則 a ?? b 的結果為 a;否則結果為 b 。

listlist=null;

listlist1=list??new list();//如果list為null,list1就會為一個新

//的例項

空合併運算子為右結合運算子,即操作時從右向左進行組合的。

例:「a??b??c」的形式按「a??(b??c)」計算。

string s = "123456789";

var r1 = s?.last();

s = null;

var r2 = s?.last();

當變數不為null時,正常執行;當變數為null時,返回null。

18樓:丹誠禹賦

c#中兩個問號(「?」)的作用是判斷「?」左邊的物件是否為null,如果不為null則使用「?」左邊的物件,如果為null則使用「?」右邊的物件。

asp.***中的問號什麼作用

19樓:匿名使用者

asp.***中有問號?你使用的可以c#語言?莫非你指的是?:運算?

?:是條件選擇運算,是一個二元運算子.使用如下:

string s = a>b?"yes":"no";

如果變數a大於變數b,則s會賦值為"yes"字串,否則賦值為"no"字串.也就是說?前邊是條件,後邊的兩個值是同型別的,表示式的結果是條件為真時取前邊的值,為否則取後邊的值!

20樓:匿名使用者

普通的變數不可為null型別,但是加上?就可以為空了

int?是一種型別,普通的int不能為null,而用int?,其值可以為null

int?或者nullable 表示基礎型別為值型別的物件,值型別與引用型別一樣也可以分配 nullnothingnullptrnull 引用

對於一個型別,如果既可以給它分配一個值,也可以給它分配 nullnothingnullptrnull 引用(在 visual basic 中為 nothing)(表示沒有任何值),我們就說這個型別是可空的。因此,可空型別可表示一個值,或表示不存在任何值。例如,類似 string 的引用型別就是可空型別,而類似 int32 的值型別不是可空型別。

由於值型別的容量只夠表示適合於該型別的值,因此它不可為空;值型別沒有表示空值所需的額外容量。

在三木運算中,也出現了? 例如string s = a>b?"yes":"no";

如果a>b,s=yes

不大於的話,s=no

相當於if..else.

vfp中問號和兩個問號的區別vfp中一個問號和兩個問號的區別

1 一個問號?表示 換行輸出 到螢幕2 兩個問號?表示 不換行輸出到螢幕 vfp中,其它常用符號表示內容如下 1 表示 不等於 2 表示 指定位置輸出,x,y 3 表示 代指所有,不論長短,在程式中,置於行首則表示後面是註釋文字。4 表示 兩個以上出現才表示符號後面是註釋文字,程式並不執行 僅在程式...

關於行列式的證明題,如圖。請問圖2中打問號和波浪號的地方是怎麼得出來的

這個是假設法,先假設一個命題在n 題目已假設 dn n 1 所以d k 1 k 1 1 d k 2 k 2 1 題目中行列式的符號是如何判斷的?30 我怎麼感覺這個寫的不標準呢。因為行列式求值可以列舉1 n的所有排列,以排列的逆序對個數作為 1的次數,設排列為p 1 n 則當前貢獻的值為 1 逆序對...

JNIEnv的使用在C和C 中的區別

c 中delete和delete的區別如下 在 用 new 分配的單個物件的記憶體空間的時候用 delete,用 new 分配的一組物件的記憶體空間的時候用 delete。程式舉例說明 include using namespace std class t t int main 基本型別的物件沒有解...