首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将不可空类型转换为可空类型的基础

将不可空类型转换为可空类型的基础
EN

Stack Overflow用户
提问于 2010-02-12 14:31:52
回答 3查看 189关注 0票数 3

将不可空类型转换为可空类型的基础是什么?

CLR内部发生了什么?

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

代码语言:javascript
运行
复制
int i = 100;

and int ? i = 7?

两者都是值类型吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-12 15:02:41

运行以下命令,查看int?是否为值类型:

代码语言:javascript
运行
复制
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属性不需要转换为它的原始类型-这项工作是在可空结构中为您完成的。

票数 0
EN

Stack Overflow用户

发布于 2010-02-12 14:37:04

int?Nullable相同,后者是一个结构,也就是一个值类型。这里没有到引用类型的转换。

下面是MSDN中Nullable的定义:

代码语言:javascript
运行
复制
[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
票数 2
EN

Stack Overflow用户

发布于 2010-02-12 14:37:02

int? i只是System.Nullable i的缩写。这两种类型都是值类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2250058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档