首页 > 编程语言 >c# 可空值类型

c# 可空值类型

时间:2023-05-13 14:23:42浏览次数:32  
标签:NonVersionable Nullable c# hasValue value 空值 readonly 类型 public

//语法糖
int? count=0;

//完整写法
Nullable<int> count = 0;
Nullable类型定义
public partial struct Nullable<T> where T : struct
    {
        private readonly bool hasValue; // Do not rename (binary serialization)
        internal T value; // Do not rename (binary serialization) or make readonly (can be mutated in ToString, etc.)

        [NonVersionable]
        public Nullable(T value)
        {
            this.value = value;
            hasValue = true;
        }

        public readonly bool HasValue
        {
            [NonVersionable]
            get => hasValue;
        }

        public readonly T Value
        {
            get
            {
                if (!hasValue)
                {
                    ThrowHelper.ThrowInvalidOperationException_InvalidOperation_NoValue();
                }
                return value;
            }
        }

        [NonVersionable]
        public readonly T GetValueOrDefault() => value;

        [NonVersionable]
        public readonly T GetValueOrDefault(T defaultValue) =>
            hasValue ? value : defaultValue;

        public override bool Equals(object? other)
        {
            if (!hasValue) return other == null;
            if (other == null) return false;
            return value.Equals(other);
        }

        public override int GetHashCode() => hasValue ? value.GetHashCode() : 0;

        public override string? ToString() => hasValue ? value.ToString() : "";

        [NonVersionable]
        public static implicit operator Nullable<T>(T value) =>
            new Nullable<T>(value);

        [NonVersionable]
        public static explicit operator T(Nullable<T> value) => value!.Value;
    }

 

 

标签:NonVersionable,Nullable,c#,hasValue,value,空值,readonly,类型,public
From: https://www.cnblogs.com/ZGXF/p/17397308.html

相关文章

  • Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远
    一、前言说明推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流推送协议有RTMP、......
  • 三菱fx3u+485ADP MB与4台欧姆龙E5CC温控器通讯案例程序 功能:通过
    三菱fx3u+485ADPMB与4台欧姆龙E5CC温控器通讯案例程序功能:通过三菱fx3u485ADP-MB板对4台欧姆龙E5cc温控器进行modbus通讯,实现温度设定,实际温度读取配件:三菱fx3u485ADP-mb,三菱fx3u485BD板,昆仑通态TPC7062KD触摸屏,4台欧姆龙E5CC系列温控器。说明:是程序,带注释,PLC通讯手册,温控器手......
  • 三菱FX3U 485ADP与4台欧姆龙E5cc温控器远程+本地通讯
    三菱FX3U485ADP与4台欧姆龙E5cc温控器远程+本地通讯程序功能:通过三菱fx3u485ADP-MB板对4台欧姆龙E5cc温控器进行modbus通讯,可以实现温度在触摸屏上设置,也可以在温控器本机上设定,实现远程和现场双向设定控制,方便操作。同时实际温度读取配件:三菱fx3u485ADP-mb,三菱fx3u485BD板,昆......
  • Educational Codeforces Round 148 [Rated for Div. 2]A~C
    A#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=60;charc[N];voidrun(){ scanf("%s",c+1); intn=strlen(c+1); map<char,int>st; st[c[1]]++; for(inti=2;i<=n/2;++i) ......
  • 台达DVP ES系列PLC与台达MS300变频器通讯程序 器件:台达DVP ES系列的P
    台达DVPES系列PLC与台达MS300变频器通讯程序器件:台达DVPES系列的PLC,台达MS300系列变频器,昆仑通态,威纶通功能:实现频率设定,启停控制,实际频率读取等。资料:带注释PLC程序,触摸屏程序,通讯设置说明,接线说明,变频器手册(附送威纶通触摸屏程序)ID:3225668898316934......
  • G034-OP-COA-OPEN-04 OpenStack 发放云主机(图形化)
    1您需要了解本篇采用OpenStack图形化界面进行操作模拟弹性公网EIP地址段规划:采用和控制节点、计算节点同一网段即可,如:192.168.100.0/24模拟云主机私网IP地址段规划:自定义网段,如:192.168.88.0/24RedHatOpenStack环境可参考下方G033博文进行搭建文章中所提到的公网......
  • css基本介绍+嵌套使用+选择器+列表样式+绝对定位
    1. 什么是CSS,有什么作用?  01CSS(Cascading Style Sheet):层叠样式表语言。CSS的作用是: 修饰HTML页面,设置HTML页面中的某些元素的样式,让HTML页面更好看。 CSS好比是HTML的化妆品一样。HTML还是主体,CSS依赖HTML。CSS的存在就是修饰HTML,所以新建的文件还是xx.html文件。2、CSS......
  • 爆肝一周,我开源了chat gpt 接口,官方1:1镜像支持全部 官方接口
    这里实现我之前文章承诺承接上文人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服现在ChatGPT提供了api接口可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也不开放接口,所以我就1:1自己对接了官方所有接口。大家可以通过我的接口轻松实现一个自己定制化......
  • 初始c语言的学习
    1、计算机的发展历史,C语言是与计算机沟通的语言,计算机只能够识别二进制,也即正负电(1,0)。2、空项目->源文件,右键新建项目->创建一个新的项目。3、头文件#include<stdio.h>主函数intmain(){(这里开始你的代码)return0;}4、第一个库函数printf("%d\n",xxx);在此介绍我所了解的库函......
  • 如何使用Docker构建运行时间较长的脚本
    问题让我们从这个我试图解决的问题开始。我开发了一个会运行很长时间的构建脚本,这个脚本中包含了很多的步骤。这个脚本会运行1-2个小时。它会从网络下载比较大的文件(超过300M)。后面的构建步骤依赖前期构建的库。但最最烦人的是,运行这个脚本真的需要花很长的时间。文件系统是固......