08.C# System.Nulable<T>和空引用操作符(四章4.2-4.4)

  看了这3小节,发现作者讲得太详细了,把一个都在正常使用的用法说得太神密了,搞得不知是自己不懂作者的苦心,还是作者用意为之,这里给大家都简单讲下吧,太深的真心讲不下去。

  1.可空类型的核心部分是System.Nullable<T>,除了这个之外,还有由静态类System.Nullable提供的工具方法。

  2.Nullable<T>是一个泛型类型,类型参数T是一个值类型约束。

  3.T的类型称为可空类型的基础类型。

  4.Nullable<T>有两个构造函数,一个用于创建没有值的实例,一个接收T的一个实例作为值

1 Nullable<int> n = new Nullable<int>();
2 Nullable<int> n1 = new Nullable<int>(1);

  5.框架提供了两个转换,T到Nullable<T>的隐式转换,Nullable<T>可以显式转换为T

1 Nullable<long> nL = 7;
2 long L = (long)nL;
3
4 //报错,需要显式转换
5 //long ll = nL;

  说到上述第一行代码,让我想起C++中的复制构造方法,或者一个参数的构造方法,大家可以去看下,C#应该也上C++中的实现吧。

  6.Nullable<T>的装箱和拆箱,不知道可不可以理解成T到Nullable<T>的隐式转换是装箱,Nullable<T>可以显式转换为T是拆箱。

  7.可以使用语法糖,减少代码的输入,使用一个符号"?"

1 int? intNull = null;

  8.可以使用null进行比较,如上

  9.可空类型可参与运算符,其中会包含一些类型转换,个中体会用过了就发现和一般的类型一样,又因为可空类型可以使用null表示,就可以参与逻辑运算符(就是返回true和false那些)。当然也可以想到对于运算符as也是正常且可用。

  请斧正。

时间: 2025-01-16 10:57:47

08.C# System.Nulable<T>和空引用操作符(四章4.2-4.4)的相关文章

.NET项目升级手记:可为空引用

c# 8引入了新特性:"可为空引用"(详情),这个功能个人觉得挺好的,能够非常明确的表现程序设计者的意图,编译器能够进行检查,尽最大可能减小NullReferenceException错误. 如果是新项目,那么上手很简单,一点点搭建起来,遇山开山,遇河渡河.但是对于我这种手头上的项目大多都是以前创建的情况,就要稍微做那边么一点操作了. 要看完整说明,请查看开头的那个链接. 准备 首先评估一下几个条件: 项目可以基于.NET CORE 3.0及以上编译.如果不行,那么就请直接右上角点×.

30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法

一:值类型/引用类型的区别      值类型主要包括简单类型,枚举类型,和结构体类型等,值类型的实例通常被分配在线程堆栈上面变量保存的内容是实例数据本身.引用类型被分配在托管堆上,变量保存的是地址.引用类型主要包括类类型,接口类型,委托类型和字符串类型等. 关于参数传递,这里有四种:        值类型参数的按值传递:        引用类型参数按值传递: 关于string引用类型参数按值传递的特殊情况:虽然string类型也是引用类型,然而在按值传递时,传递的实参却不会因方法中形参的改变而被

C# in depth ( 第四章 可空类型)

4.1没有值时怎么办 想为DateTime变量设为null,但编译器不允许 (一个商品还没有卖出,则没有购买日期) 4.1.1为什么值类型的变量不能为null 对于引用类型的变量来说,其值是一个引用,而值类型变量的值是它本身的真实数据.可以认为,一个非空引用值提供了访问一个对象的途径.然而,null相当于一个特殊的值,它意味着我不引用任何对象. 4.1.2 C#1.0中表示空值的模式 魔值  (DateTime.MinValue) 引用类型包装 额外的布尔标志 4.2 System.Nullab

【足迹C++primer】48、函数引用操作符

函数引用操作符 struct absInt { int operator()(int val) const { cout<<val<<"<->!!!"<<endl; return val<0 ? -val : val; } }; void fun1() { int i=-42; absInt absObj; int ui=absObj(i); } Function-Object Classes with State 函数对象类的状态

WPF中ErrorTemplate导致的空引用at MS.Internal.Controls.TemplatedAdorner.MeasureOverride(Size constraint)

?? 最近遇到一个崩溃,dump信息如下: Object reference not set to an instance of an object. at MS.Internal.Controls.TemplatedAdorner.MeasureOverride(Size constraint)   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)   at System.Windows.UIElement.M

MySql to EF在SaveChange时报空引用的错误

项目中有使用MySql数据库,EF做数据层,发现有一张表保存时始终报错.报错信息如下 System.NullReferenceException: 未将对象引用设置到对象的实例.   在 MySql.Data.Entity.ListFragment.WriteSql(StringBuilder sql)   在 MySql.Data.Entity.SelectStatement.WriteSql(StringBuilder sql)   在 MySql.Data.Entity.InsertSta

编译器错误消息: CS0012: 类型“System.Object”在未被引用的程序集中定义。必须添加对程序集“netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51“的引用

解决方案:在web.config文件system.web/compilation节点添加配置节点: <compilation debug="true" targetFramework="4.7.1" > <assemblies> <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"

空引用,未将对象引用设置到对象的实例

作为小白的我,目前没有写过惊天地泣鬼神的代码,每天都是从数据库,到模型,再到页面,再到数据库. 整个过程变量,对象,传递来来回回. 那么问题来了,当我满怀期待的按下F5(在Visual Studio),程序抛了一个“未将对象引用设置到对象的实例”的异常给我,顿时满脑子的想法就是 what are you 弄啥咧?? 一定不是我代码的问题.一定不是. 但是现实总是残忍的,还是面对现实吧,情况只有两种: 1  声明的变量没有正确赋值. 2  数据库中存在异常数据,导致当代码中没有进行 NULL 值判

第二十四章 C++11特性之右值引用

右值引用,是 C++11 语言核心中最为重要的改进之一.右值引用给 C++ 带来了“Move语义”(“转移语义”),同时解决了模板编程中完美转发的问题(Perfect forwarding).右值引用使 C++ 对象有能力甄别什么是(可以看作)临时对象,对于临时对象的拷贝可以做某种特别的处理,一般来说主要是直接传递资源的所有权而不是像一般地进行拷贝,这就是所谓的 move 语义了.完美转发则是指在模板编程的时候,各层级函数参数传递时不会丢失参数的“属性”(lvalue/rvalue, const