将Not Nullable类型转换为Nullable类型的基础是什么?
CLR内部会发生什么?
值类型是否内部转换为引用类型?
int i = 100;
and int ? i = 7?
都是值类型?
答案 0 :(得分:2)
int?
与作为结构的Nullable<int>
相同,即值类型。此处没有引用类型的转换。
以下是MSDN中Nullable的定义:
[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
答案 1 :(得分:1)
int? i
只是System.Nullable <int>
i
的简写。两者都是价值类型。
答案 2 :(得分:0)
运行此命令以查看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
属性不需要转换为它的原始类型 - 在可为空的结构中为你完成了工作。