我想要一個整數變量,可以設置爲空,不希望使用int? myVariable
語法。我嘗試使用int
和Int16
無濟於事。我必須使用int? myVariable
嗎?什麼是C#中的整數引用類型?
我提到過這個,因爲在Java中同時存在'int'類型(原語)和'Integer'(引用類型)。我想確保沒有可以使用的內置整數引用類型。我會用'int?'爲了我在做什麼。
我想要一個整數變量,可以設置爲空,不希望使用int? myVariable
語法。我嘗試使用int
和Int16
無濟於事。我必須使用int? myVariable
嗎?什麼是C#中的整數引用類型?
我提到過這個,因爲在Java中同時存在'int'類型(原語)和'Integer'(引用類型)。我想確保沒有可以使用的內置整數引用類型。我會用'int?'爲了我在做什麼。
有關信息,int?
/Nullable<T>
是不是參考型;它只是一個「可空類型」,意思是:具有特殊編譯器規則(重新空檢查,運算符等)和CLI規則(用於裝箱/拆箱)的結構(實質上是int
和bool
標誌)。有是在.NET中沒有「整數引用類型」,除非你把拳擊:
int i = 123;
object o = i; // box
但這帶來不必要的對象,有很多相關的其他問題。
對於你想要的,int?
應該是理想的。你可能使用長期的語法(Nullable<int>
),但IMO這是不必要的冗長,我已經看到它混淆了人。
恕我直言_?_混淆取決於背景 - 它混淆了紅寶石的人。我們使用空值
你將如何處理你有一個IDictionary
@Marchy'theDictionary [someObject] = newValue'會正常工作;即分配給索引器,該索引器已定義良好並得到完全支持 – 2011-06-27 05:34:57
是的,這是唯一的方法,因爲Int32/Int16/int是一個基本類型(不管這些是裝箱/拆箱)。
是的,你應該使用可空類型
Nullable<int> Nullable<float>
或者乾脆
int? float?
PS:
如果你不想使用?符號或Nullable - 只需使用特殊的結構來完成這樣的事情。例如DataTable:
var table = new DataTable();
table.Columns.Add('intCol',typeof(int));
var row = table.NewRow();
row['intCol'] = null; //
請注意,這不是一個引用類型,因爲您的鏈接(「表示可以分配空值的值類型」)。但它確實回答了OP的潛在問題,如果不是標題中的問題。 – Kat 2015-08-10 20:29:38
的<var>?
語法使得空。如果你深入瞭解一下,你會發現它只是一個被使用的通用對象。
如果你想像C++那樣做,你必須使用不安全的操作。然後,像C中的指針可用,但是您的代碼不符合CLR ...
對於使用純淨的無指針的.NET,?
是要走的路。
它不是一個對象,Nullable是一個結構體。 – 2010-01-28 06:38:51
是的。這就是微軟補充說的原因。人們正在創建自己的Nullable類,因此他們在.NET中包含了這種模式。
如果你討厭?
這麼多,你可以使用System.Nullable<int>
。
Nullable types are instances of the System.Nullable(T) struct.
因此int,int?,可空<INT>都值類型,不參考類型
你將不得不使用可空類型,即:
Nullable<int> or int?
可空類型的目的是,使您將null分配給值類型。
從MSDN:
可空類型地址,你希望能夠有一個基本類型與空(或未知)值的情況。這在數據庫場景中很常見,但在其他情況下也很有用。
在過去,有這樣幾種方式:
- 裝箱值類型。這在編譯時不是強類型的,並且涉及爲每個類型分配一個堆。
- 值類型的類包裝器。這是強類型的,但仍然涉及堆分配,並且您必須編寫包裝器。
- 支持空性概念的結構包裝器。這是一個很好的解決方案,但你必須自己寫。
...爲什麼你不想使用該語法? – womp 2010-01-28 06:31:29
@Jon,這就像......我希望編譯器知道它,而不用我說出來。 – Dykam 2010-01-28 06:33:57