C#2.0 可空类型
2021/9/28 14:11:06
本文主要是介绍C#2.0 可空类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
起因
A: 可为空类型是值类型还是引用类型? B: 呃?...(一时语塞)
分析
首先我们应该先了解下什么是可空类型,从字面上很好理解,就是原先不可为空类型现在可以赋空值了,实际上也是如此。 原来:int a = null; // 非法 现在:int? a = null; // 没毛病 int?很明显是C#提供的一种语法糖,实际上是System.Nullable<int>。 既然我们知道了结构,我们可以通过ILSpy来看下源码。 using System; using System.Runtime.Versioning; namespace System { [__DynamicallyInvokable, NonVersionable] [Serializable] public struct Nullable<T> where T : struct { private bool hasValue; internal T value; [__DynamicallyInvokable] public bool HasValue { [__DynamicallyInvokable, NonVersionable] get { return this.hasValue; } } [__DynamicallyInvokable] public T Value { [__DynamicallyInvokable] get { if (!this.hasValue) { ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_NoValue); } return this.value; } } [__DynamicallyInvokable, NonVersionable] public Nullable(T value) { this.value = value; this.hasValue = true; } [__DynamicallyInvokable, NonVersionable] public T GetValueOrDefault() { return this.value; } [__DynamicallyInvokable, NonVersionable] public T GetValueOrDefault(T defaultValue) { if (!this.hasValue) { return defaultValue; } return this.value; } [__DynamicallyInvokable] public override bool Equals(object other) { if (!this.hasValue) { return other == null; } return other != null && this.value.Equals(other); } [__DynamicallyInvokable] public override int GetHashCode() { if (!this.hasValue) { return 0; } return this.value.GetHashCode(); } [__DynamicallyInvokable] public override string ToString() { if (!this.hasValue) { return ""; } return this.value.ToString(); } [__DynamicallyInvokable, NonVersionable] public static implicit operator T?(T value) { return new T?(value); } [__DynamicallyInvokable, NonVersionable] public static explicit operator T(T? value) { return value.Value; } } } 从源码中我们能够了解到: 1、System.Nullable<T>是一个泛型,该泛型提供了一个约束struct,struct是什么类型就不用多说了吧
这篇关于C#2.0 可空类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#