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
    如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。

  • 相关阅读:
    【SSH进阶之路】Hibernate映射——一对多关联映射(七)
    深入研究Clang(四) Clang编译器的简单分析
    LLVM每日谈之二十 Everything && Clang driver
    LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>
    session在登录中的使用
    (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
    网页中自动获取访问用户所在城市的接口插件
    bootstrap新闻模块样式模板
    springmvc的渲染
    springmvc的几点见解
  • 原文地址:https://www.cnblogs.com/ITBread/p/2227209.html
Copyright © 2011-2022 走看看