将不可空类型转换为可空类型的基础是什么?
CLR内部发生了什么?
值类型是否在内部转换为引用类型?
int i = 100;
and int ? i = 7?
两者都是值类型吗?
发布于 2010-02-12 15:02:41
运行以下命令,查看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
属性不需要转换为它的原始类型-这项工作是在可空结构中为您完成的。
发布于 2010-02-12 14:37:04
int?
与Nullable
相同,后者是一个结构,也就是一个值类型。这里没有到引用类型的转换。
下面是MSDN中Nullable的定义:
[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
发布于 2010-02-12 14:37:02
int? i
只是System.Nullable
i
的缩写。这两种类型都是值类型。
https://stackoverflow.com/questions/2250058
复制相似问题