不可空類型轉換爲可空類型的基本知識是什麼?不可空值轉換爲可空類型的基本知識
CLR內部會發生什麼?
是否將值類型內部轉換爲引用類型?
int i = 100;
and int ? i = 7?
是否都是值類型?
不可空類型轉換爲可空類型的基本知識是什麼?不可空值轉換爲可空類型的基本知識
CLR內部會發生什麼?
是否將值類型內部轉換爲引用類型?
int i = 100;
and int ? i = 7?
是否都是值類型?
運行該地看到,int?
是值類型:
class Program
{
static int? nullInt;
static void Main(string[] args)
{
nullInt = 2;
Console.WriteLine(string.Format("{0} + 3 != {1}", nullInt, DoMath(nullInt , 3).ToString()));
Console.WriteLine(string.Format("{0} * 3 = {1}" , nullInt , DoMultiply(nullInt , 3).ToString()));
nullInt = null;
Console.WriteLine(string.Format("{0} + 3 != {1}" , nullInt , DoMath(nullInt , 3).ToString()));
Console.WriteLine(string.Format("{0} * 3 = {1}" , nullInt , DoMultiply(nullInt , 3).ToString()));
Console.ReadLine();
}
static int? DoMath(int? x , int y)
{
if (x.HasValue)
{
return (++x) + y;
}
else
return y;
}
static int DoMultiply(int? x , int y)
{
if (x.HasValue)
{
return (int)x * y;
}
else
return 0;
}
}
我發現這是非常有趣的,並就一些聰明的用途。
什麼?
確實是創建一個可爲空的引用,否則不可爲空值類型。這就像有一個可以檢查的指針 - HasValue
(一個布爾值)? Nullable<T>
的好處在於Value
屬性不需要轉換爲原始類型 - 該工作在可空結構中完成。
int? i
只是System.Nullable <int>
i
的簡寫。兩者確實是價值類型。
int?
與Nullable<int>
相同,它是一個結構,即值類型。這裏沒有轉換爲引用類型。
下面是可空的,從MSDN定義:
[SerializableAttribute]
public struct Nullable<T> where T : struct, new()