c中型別後跟再跟變數是什麼意思,C 中,為什麼在值型別後面加問號

2021-03-23 19:56:00 字數 4032 閱讀 3751

1樓:高金山

是 可空

型別!比如 int? a;

那麼 可以這樣賦值:a=null;

可空型別是 system.nullable 結構的例項。可空型別可以表示其基礎值型別正常範圍內的值,再加上一個 null 值。

例如,nullable,讀作「可空的 int32」,可以被賦值為 -2147483648 到 2147483647 之間的任意值,也可以被賦值為 null 值。nullable可以被賦值為 true 或 false,或 null。在處理資料庫和其他包含可能未賦值的元素的資料型別時,將 null 賦值給數值型別或布林型的功能特別有用。

例如,資料庫中的布林型欄位可以儲存值 true 或 false,或者,該欄位也可以未定義。

可空型別概述

可空型別具有以下特性:

可空型別表示可被賦值為 null 值的值型別變數。無法建立基於引用型別的可空型別。(引用型別已支援 null 值。)。

語法 t? 是 system.nullable的簡寫,此處的 t 為值型別。這兩種形式可以互換。

為可空型別賦值與為一般值型別賦值的方法相同,如 int? x = 10; 或 double? d = 4.108;。

如果基礎型別的值為 null,請使用 system.nullable.getvalueordefault 屬性返回該基礎型別所賦的值或預設值,例如 int j = x.

getvalueordefault();

請使用 hasvalue 和 value 只讀屬性測試是否為空和檢索值,例如 if(x.hasvalue) j = x.value;

如果此變數包含值,則 hasvalue 屬性返回 true;或者,如果此變數的值為空,則返回 false。

如果已賦值,則 value 屬性返回該值,否則將引發 system.invalidoperationexception。

可空型別變數的預設值將 hasvalue 設定為 false。未定義 value。

使用 ?? 運算子分配預設值,當前值為空的可空型別被賦值給非空型別時將應用該預設值,如 int? x = null; int y = x ?? -1;。

不允許使用巢狀的可空型別。將不編譯下面一行:nullable> n;

2樓:匿名使用者

是可空型別

詳細的樓上說的很好,,暈,,來晚了

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

3樓:驚慌夜

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

4樓:

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

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

5樓:匿名使用者

int i=null;報錯

int? i=null;通過

我感覺就這一個區別

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

6樓:匿名使用者

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

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

num = null

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

7樓:一個人『等待

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

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

system.nullablevariable

- 或 -

t? variable

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

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

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

8樓:匿名使用者

1. 可空型別修飾符

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

2. 三元表示式:

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

9樓:

可空型別修飾符「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?的拆箱轉換。但是任何情況下可空型別都不滿足介面約束,即使基礎型別實現了該特定介面。

10樓:匿名使用者

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

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

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

11樓:匿名使用者

可為空值,即null

js中變數後面有個問號是什麼意思?

12樓:四舍**入

這個是三元操作符,它在每一種語言中的功能和語法都是一樣的。

舉例:int a=3;int b=5;

int c= a>b?1:0;

解釋:a大於的話,c就等於1,否則的話c等於0;

?是判斷的意思,: 是否則的意思。

13樓:

問號與冒號要連在一起看。它們是完整的運算子。

如a=(b)?c:d

表示b不為0嗎(或b為真嗎)?如果是,a=c;如果不是,a=d。

對於你的例子,表示當n不為0時,返回n*arguments.callee(n-1);否則,返回1。

在c#中,定義一個類的變數,宣告一個類的變數和建立一個類的變數還有什麼例項化類的變數都是什麼意思?

14樓:陽光的雷咩咩

定義、宣告都是說的源**裡的,建立、例項化說的是執行時的。先定義/宣告瞭,編譯成目標位元組碼,執行時才能建立/例項化成物件,物件你就看成記憶體中實實在在存在的一片區域。

c#中「float taxrate = 0.1f」0.1後面的f是什麼意思?

15樓:子影

為了區分 float 和double,float型別最後加f;double型別最後加d

16樓:8相約

王氏得知實情,亦責石榮無情無義,留胡氏在府,情同姐妹。胡氏未卜先知,令石榮頓生疑心。

17樓:仙藤紫霧

如果不用表示雙精度,付值給單精度會得到一個警告,加上代表單精度浮點

c中的是什麼意思,C中是什麼意思

主要有兩個用法 一個是輸出運算子 如cout 5 另一個是移位運算子,n 就相當於c語言中的 左移,相當於乘以1 3,變成8 include using namespace std int main int a cin a 輸入一個數 cout c 中 是什麼意思 如果是cin a 表示輸入值到變數...

在c中是什麼意思,c是什麼意思

和 用法差不多 a b,a a b 是按位或並賦值的意思。若有兩個整型變數a和b,那麼a b 就是a a b 的意思。一 釋義 是不等於號的意思。如 if c 2 判斷 c 不等於 2 二 c 的簡單介紹 c 是在c語言的基礎上開發的一種通用程式語言,應用廣泛。c 支援多種程式設計正規化 物件導向程...

c 中? 運算子是什麼意思,C 中 是什麼意思?

還有一中就是 冒號語法。在c 的建構函式後可以使用。冒號後面可以完成很多功能,比如給成員變數賦初值 呼叫基類的帶參建構函式等。是一個三目運 算符,叫做條件運算子.具體的試用方法為 z x y x y 上面的語句的意思內是,首先判斷x與y的大小,當容x大於y時,即上面的語句x y為真的時候,則將x的值...