zoukankan      html  css  js  c++  java
  • 可空类型和运算符,空接合运算符

    看了nowpaper的博客,里面代码写法 Point ? mousePoint = null;

    特意翻了C#高级编程第七版,温习下运算符知识。

    7.可空类型和运算符

    对于布尔类型,可以给它指定true或false值。但是,要把该类型的值定义为undefined,该怎么办?此时使用可空类型可以给应用程序提供一个独特的值。
    如果在程序中使用可空类型,就必须考虑null值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都是null,其结果就是
    null。例如:
    int? a = null;
    int? b = a + 4; // b = null
    int? c = a * 5; // c = null
    但是在比较可空类型时,只要有一个操作数是null,比较的结果就是false。即不能因为一个条件是false,就认为该条件的对立面是true,这在使用非可空类型的程序中很常见。例如:
    int? a = null;
    int? b = -5;
    if (a >= b)
    Console.WriteLine("a >= b");
    else
    Console.WriteLine("a < b");
    输出:a<b ,把else 改成 if(a<b),结果什么也不输出
    null值的可能性表示,不能随意合并表达式中的可空类型和非可空类型,详见本章后面的内容。
    7.1.2 空接合运算符
    空接合运算符(??)提供了一种快捷方式,可以在处理可空类型和引用类型时表示null值。这个运算符放在两个操作数之间,
    第一个操作数必须是一个可空类型或引用类型,第二个操作数必须与第一个操作数的类型相同,或者可以隐含地转换为第一个操作数的类型。
    空接合运算符的计算如下:如果第一个操作数不是null,
    则整个表达式就等于第一个操作数的值。但如果第一个操作数是null,则整个表达式就等于第二个操作数的值。例如:
    int? a = null;
    int b;
    b = a ?? 10; // b has the value 10
    a = 3;
    b = a ?? 10; // b has the value 3
    如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。

  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/ITBread/p/2227209.html
Copyright © 2011-2022 走看看