1. 程式人生 > >C#定義型別後帶問號

C#定義型別後帶問號

int?:表示可空型別,就是一種特殊的值型別,它的值可以為null
用於給變數設初值得時候,給變數(int型別)賦值為null,而不是0
int??:用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦役個新值,否則跳過
public int? a=null;
public int b()
{
return this.a ?? 0;
}

值型別後面加問號表示可為空null(Nullable 結構)

Nullable是.NET 2.0中新提供的一種用於標明一個值型別是否可以為空的技術。

對於一個型別,如果既可以給它分配一個值,也可以給它分配空引用null(表示沒有任何值),我們就說這個型別是可空的。

因此,可空型別可表示一個值,或表示不存在任何值。例如,類似 String 的引用型別就是可空型別,而類似 Int32 的值型別不是可空型別。Nullable 結構支援將值型別擴充套件為可以為null,但不支援在引用型別上使用,因為引用型別本身就是可空的。

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

例:public int? age;

補充:其它的型別後加問題也是同樣的道理。
int? num = null;   正確
int num=null;     錯誤
---------------------------------------------------------------------------------------------------------------------------
微軟MSDN是提示如下例子:
http://msdn.microsoft.com/zh-cn/support/1t3y8s4s(VS.80).aspx

相關推薦

C#定義型別問號

int?:表示可空型別,就是一種特殊的值型別,它的值可以為null 用於給變數設初值得時候,給變數(int型別)賦值為null,而不是0 int??:用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦役個新值,否則跳過 public int? a=null; public int b() { ret

C#中型別中單問號與多問號含義

 在C#中有時會碰到變數型別後面個單問號或雙問號,如下int? id = null; private string GetData( ) { //邏輯處理; return data ?? "OK"; } 1、單問號:表示用於給變數賦初值,給變數(int型別)賦值

C#實體類中在資料型別後面新增問號是什麼意思

C#實體類中在資料型別後面新增問號是什麼意思  public static DateTime? GetTimeStartByType(DataTimeType type, DateTime time)   C#語法中一個個問號(?)的運算子是指:可以為 null

C++學習之自定義型別

我們在C語言裡面學習了結構體,在C++中的結構體和C中的結構體不一樣。C++允許新增建構函式,成員方法,訪問許可權等等。在C++中還有一種型別叫做類,也可以有成員方法,訪問許可權和建構函式,成員變數等等。那麼這之間有什麼區別呢?其實沒有區別,唯一的區別就是在不宣告許可權的時候預設許可權問題。

C語言:自定義型別部分知識點

>結構體型別建立 結構的基礎知識:結構是一些值的集合。這些值稱為成員變數。結構的每個成員可以是不同型別的變數。 結構的宣告: struct Stu {     char name[20];//名字     int age;//年齡     char sex[15];

關於C++巨集引數的定義型別問題

巨集引數可以是沒有定義型別的東西,很奇特! REGISTER_OSGEARTH_LAYER(land_cover_dictionary, LandCoverDictionary); #define REGISTER_OSGEARTH_LAYER(NAME,CLASS) \

知識點總結: c#,使用自定義型別來作為Dictionary的Key

首先來看一個變數的定義: /// <summary> /// key依次是StationId,channelId,deviceId,paraType,dataId,dataTypeId,logicalDeviceIndex,paraHandle,

C語言自定義型別:結構體、列舉、聯合

結構體 結構體的宣告 結構體的自引用 結構體變數的定義和初始化

C語言自定義型別解析----結構體

      C語言當中有一部分型別是自定義型別,比如結構體、陣列、列舉、聯合,其實指標也是自定義型別,我們可以定義各種各樣型別的指標,這在我之前的文章中有指標的解析。本文著重於講解結構體型別,以及它的一個重要特徵------記憶體對齊 一.結構體

跨平臺C/C++資料型別定義

1       需考慮問題1.1    編譯器執行作業系統 l        WINDOWS :  _WIN32、WIN32; l        UNIX/LINUX:  unix、__unix、__unix__;  l        SunOS/SOLARIS: _

C++中自定義型別列舉型別

不限定作用域列舉型別說明: 列舉元素是常量,不能對它們賦值 例如有如下定義enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT}; 不能寫賦值表示式:SU

使用者自定義型別C#基礎型別轉換的方式

      比如現在有一個Person類,包含兩個屬性:name和age,現在我想把現在例項化一個Person類,名稱為p,我現在想把p轉換成我想要的string型別,有如下三種方式:       1、在Person類中,重寫系統定義的ToString()方法:    

C#建構函式、操作符過載以及自定義型別轉換

構造器   構造器(建構函式)是將型別的例項初始化的特殊方法。構造器可分為例項構造器和型別構造器,本節將詳細介紹有關內容。 例項構造器   顧名思義,例項構造器的作用就是對型別的例項進行初始化。如果類沒有顯示定義任何構造器,C#編譯器會定義一個預設的無參構造器。相反,如果類

Effective C++讀書筆記----自定義型別的傳參和返回值問題

對於自定義型別,傳參的時候儘可能的使用傳引用來代替傳值。 看如下這個例子: #include <iostream> using namespace std; #include <string> class Person {

C#、.NET端,B介面-微信小程式引數二維碼的生成

介面B:適用於需要的碼數量極多,或僅臨時使用的業務場景 介面地址:https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN 注意:通過該介面生成的小程式碼,永久有效,數量暫無限制。使

C#decimal型別保留小數點有效數字

例: decimal d=0.5000; d.ToString(“0.##”); 也可以這樣 string.Format(“{0:0.##}”,d000) .##表示最多保留2位有效數字,但是不包括0,就是說 如果上面d=0.

關於c++中型別定義typedef和類模板能否共用問題

#include <iostream> #include <deque> using namespace std; template <class T> class A { typedef deque<T> cont; p

\t\t在MSSQL中定義和使用C#自定義型別 SQL Server08表型別引數傳遞

在學習SQL Server 2008的過程中,突然發現SQL Server支援自定義表型別,我們可以輕鬆的將一個SQL Server 2008表型別作為引數傳遞給儲存過程。C#下實現了SQL Server 2008表型別引數傳遞本示例中用到的型別在資料庫中的位置:建立一個自定義表型別CREATE TYPE [

C++中堆的使用及自定義型別排序

簡介 C++中堆(heap)是在vector的基礎上實現的。具體地,是定義了一些方法在vector型別資料上進行操作,包括 - make_heap 建立堆(預設最大堆) - push_heap 加入元素 - pop_heap 刪除元素 - sort_h

c++中在一個類中定義另一個引數建構函式的類的物件

c++中在一個類中定義另一個只有帶引數建構函式的類的物件,編譯通不過 class A {     public: A(int i){}     }; class B {     public: B(){}     private: