将Nullable转换为Nullable类型的基础知识

时间:2010-02-12 06:31:52

标签: c#-3.0

将Not Nullable类型转换为Nullable类型的基础是什么?

CLR内部会发生什么?

值类型是否内部转换为引用类型?

int i = 100;

and int ? i = 7?

都是值类型?

3 个答案:

答案 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属性不需要转换为它的原始类型 - 在可为空的结构中为你完成了工作。