zoukankan      html  css  js  c++  java
  • C# int? 关键字

    1、int?  关键字说明

    (1)、int? 表示一个int类型,且该int类型可空,如果不加?的话,那么int类型的默认值为0,不能赋null值,代码如下:

      int aa = null;

    (2)、当给一个变量定义成int?类型的时候,那么我们在给其赋初值的时候,可以赋null,也可以赋0.

    (3)、int??:用于判断并赋值,先判断当前变量是否为null,如果是就可以赋役个新值,否则跳过,代码如下:

    static void Main(string[] args)
    {
         int? aa = 1;
         Console.WriteLine(aa ?? 0);
    }

    输出:

    2、?(Nullable)

    Nullable是.NET 2.0中新提供的一种用于标记一个值类型是否可以为空的技术。

    对于一个类型,我们既可以给它赋一个值,也可以给它分配一个空引用,我们就说这个类型是可空的,因此:

    (1)、类似string的引用类型就是可空类型

    (2)、像int32等的值类型就不是可空类型,因为它们不能赋null值,因为Nullable(?)结构将支持值类型扩展成可空类型,但是不支持引用类型,应为它们原本就是可空类型

    3、可空类型具有以下特征

    (1)、可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。

    (2)、语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型。这两种形式可以互换。

    (3)、为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;

    (4)、如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();

    (5)、请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;

    (6)、如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False

    (7)、如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException

    (8)、可空类型变量的默认值将 HasValue 设置为 false。未定义 Value

    (9)、使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;

    (10)、不允许使用嵌套的可空类型。将不编译下面一行:Nullable<Nullable<int>> n;

    4、代码示例:

            static void Main()
            {
                int? num = null;
                //可空类型如果设置为默认值为null的话,那么系统将会把HasValue属性设置为false
                if (num.HasValue == true)
                {
                    System.Console.WriteLine("num = " + num.Value);
                }
                else
                {
                    System.Console.WriteLine("num = Null");
                }
                int y = num.GetValueOrDefault();
                //如果将可空类型的默认值设置为null,那么如果此时获取其Value属性,那么系统将会报(System.InvalidOperationException)错
                try
                {
                    y = num.Value;
                }
                catch (System.InvalidOperationException e)
                {
                    System.Console.WriteLine(e.Message);
                }
            }
  • 相关阅读:
    WCF 第四章 绑定 在多个绑定上暴露一个服务契约
    WCF 第五章 行为 事务跨操作事务流
    WCF 第五章 导出并发布元数据(服务行为)
    WCF 第五章 行为 通过配置文件暴露一个服务行为
    WCF 第五章 不支持会话的绑定的默认并发和实例
    WCF 第五章 并发和实例(服务行为)
    WCF 第五章 行为 总结
    WCF 第四章 绑定 绑定元素
    WCF 第五章 行为 事务之选择一个事务协议OleTx 或者WSAT
    WCF 第四章 绑定 比较各种绑定的性能和可扩展性
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6756922.html
Copyright © 2011-2022 走看看