首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏草根专栏

    Nullable Reference Types 引用类型

    引用类型 Null Reference Type 所以,C# 8的引用类型就出现了。 C# 8可以让你在编译时就避免null引用错误,它并不是把null值从代码里移除了,而是它可以让你表达意图。具体的做法就是你可以告诉编译器哪个引用可能是null的,而哪些引用不可能是null。 这是因为我们把这两个类的成员声明称了非null的引用类型,而我却没有对它们进行初始化。 成员可能是null的 如果我想让这些成员可以为null(意图上),那么就需要把它们设置为null的(意图),在类型后边加上问号“?”即可: ? 再次build项目之后,警告都没有了: ? 提示还是比较智能的,有警告,它说无法把null这个字面值转化为非null的引用类型。 另一种开启nullable检查的方式 如果把老项目的项目文件直接添加以下内容: ?

    1.2K30发布于 2019-10-15
  • 来自专栏技术博客

    C# 堆与栈、值类型引用类型类型

    其他由.NET框架(Framework)提供的,或者是我们自己定义的对象即引用类型,一般被创建在堆中并将由栈中变量引用。 栈上存储的是:值类型引用类型的“地址” 堆上是:引用类型的“对象”或者是引用类型的实际值,类型 2.值类型引用类型类型:数值型 字节  布尔  结构 枚举 ,他们都继承自System.ValueType 引用类型:类  接口  委托 对象  字符串,他们都继承自System.Object 3.类型 在VS中敲完代码一看报错了 ? 只需在在DateTime类型后加个? ? 这就是类型 类型可以表示基础类型的所有值,另外还可以表示 null 值。 类型可通过下面两种方式中的一种声明: 1、System.Nullable<T> variable 2、T? variable T 是类型的基础类型

    1.3K10发布于 2019-02-25
  • 来自专栏科控自动化

    类型

    2.2 类型 Tony Hoare于1965年在Algol语言中首次引入了null引用的概念,后来他把这项举措称为“十亿美金的过失”。 当非类型被装箱时,返回结果的类型就是原始的装箱类型,例如:int x = 5; object o = x;o是对“装箱int”对象的引用。 有一点需要强调:当null用于类型时,它表示HasValue为false的类型的值,而不是null引用。null引用类型不容易辨明,例如以下两行代码是等价的: int? 下面介绍另一个可以应用于类型的运算符,其行为更符合我们的直观预期:只需要把null引用的行为照搬到null值上即可。 as运算符与类型 在C# 2之前,as运算符只能用于引用类型;到了C# 2,as运算符也可以用于类型了。

    3.5K30编辑于 2022-03-29
  • 来自专栏DotNet NB && CloudNative

    C# 可为引用类型

    自 C# 1.0 发布以来,一直存在的最大问题区域之一也许就是引用类型能否为。实际上,引用类型默认为。 提供指明应使用值的语法 首先,需要有语法区分何时引用类型应为,何时不应为。允许为的语法明显就是使用 ? 作为可为声明,这对值类型引用类型都适用。 借助引用类型支持,方便开发人员选择启用值,例如: string? text = null; 通过新增的此语法,就会明白为什么关键的可为改进是通过看似令人困惑的名称“可为引用类型”进行概括。 这不是因为新增了一些可为引用数据类型,而是现在开始支持显式选择启用所述数据类型。 提供了可为引用类型语法,不可为引用类型语法又如何呢? 虽然下面的语法: string! 分别是可为引用类型、不可为引用类型,以及具体含义我也不知道的引用类型?呃,不是这样的!! 相反,我们真正需要的是: 可为引用类型:string?

    1.6K20编辑于 2023-08-29
  • 来自专栏JusterZhu

    C# 类型

    概要 C#的引用类型是一项功能,允许开发人员在变量、参数、字段、属性和返回值等可能为null的情况下,明确地表示其可以为null,或者不能为null。 通过使用引用类型,开发人员可以更早地捕捉到潜在的引用问题,从而减少了因为引用而引起的错误。 优缺点有哪些 优点: 更严格的类型检查: 类型引入了更严格的类型检查,使得开发人员必须明确处理可能为null的情况,减少了引用异常的发生,提高了代码的稳定性和可靠性。 可能引发指针异常: 虽然类型减少了引用异常的发生概率,但如果开发人员不正确地处理类型,仍然可能引发指针异常,因此需要开发人员小心处理类型的使用。 是合并运算符(null coalescing operator)。它用于定义类型引用类型的默认值。如果左操作数不为null,则??运算符返回左操作数,否则返回右操作数。

    97450编辑于 2023-10-06
  • 来自专栏工厂程序员

    C#类型

    类型修饰符(?)   引用类型可以使用引用表示一个不存在的值,而值类型通常不能表示为。    为了使值类型也可为,就可以使用类型,即用类型修饰符"?"来表示,表现形式为"T?"   例如:int? 表示的整形,DateTime? 表示可为的时间。   T? 合并运算符(??)    用于定义类型引用类型的默认值。   如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。   例如:a?? 合并运算符为右结合运算符,即操作时从右向左进行组合的。   如,“a??b??c”的形式按“a??(b??c)”计算。 ? ? ? ? 3.NULL检查运算符(?.) 运算符返回的可以是NULL,当返回的成员类型是struct类型的时候,"?."和"."运算符的返回值类型是不一样的。

    2.3K30发布于 2021-08-10
  • 来自专栏.NET开发那点事

    Swift(Optional)类型基础

    类型,对于熟悉C#的同学一定不会陌生。在C#里面值类型都是不能为的,比如int类型默认为0,bool默认为false。但是我们给int加上?后,就是一个类型了。 那么Swift里面呢。 Swift里面没有区分值类型引用类型(或许有,可能我还没看到这方面的资料)。那这个是怎么回事呢。原来在Swift里变量默认是不为的。 NET C#里类型分值类型引用类型引用类型的变量全部可以为。值类型不能为。如果想要为,那就是用类型。那我们开发的时候,可以发现其实使用引用类型的时候比使用值类型的时候多多了。 因为除了FCL的Class,我们自定义的各种Class也都是引用类型。但是Swift却正好相反,Swift里变量默认是不能为的。也就是跟C#里的值类型一样,都要给默认值。 需要的时候就使用来处理。这里也可以看出来2门语言的设计者不同的两种思路。C#觉得对象的属性/变量大部分时候是存在需求的。而Swift觉得对象的属性大部分时候是不存在需求的。

    1.1K20编辑于 2022-05-07
  • 来自专栏每天学点Android知识

    Kotlin中的类型

    Kotlin为了解决这个问题,引进了类型,将运行时可能发生异常提前到编译期发现。 Kotlin中有类型,这种类型表示取值可能为;而一般类型,则取值不能为。区别是类型后面有一个? ,表示这个类型的。 举个栗子: var s? =null var s="Hello World" var s=null //编译器提示错误,因为s1是不可类型 为了应对的判断,Kotlin提供了几种操作符。 ,结果也是一个可能为类型。?.的返回类型需要注意,是一个类型 ?: Java中的三目运算符?:的使用如下: int length(String s){ return s==null? 所以说,Kotlin中虽然有了类型,但也不是就没有空指针异常哦。

    2.3K31发布于 2019-08-17
  • 来自专栏walterlv - 吕毅的博客

    C# 8.0 如何在项目中开启引用类型的支持

    本文将介绍如何在项目中开启 C# 8.0 的引用类型的支持。 walterlv 的变量定义,那么 walterlv 就是可为引用类型。 对于类型参数来说,可能不能确定是否是引用类型,那么将视为“未知”。 在源代码文件中开启引用类型的支持 除了在项目文件中全局开启引用类型的支持,也可以在 C# 源代码文件中覆盖全局的设定。 #nullable enable: 在源代码中启用引用类型并给出警告。 #nullable disable: 在源代码中禁用引用类型并关闭警告。 #nullable disable annotations: 在源代码中禁用引用类型。 #nullable enable annotations: 在源代码中启用用引用类型

    1.5K20编辑于 2023-10-22
  • 来自专栏一个会写诗的程序员的博客

    第3章 Kotlin 类型类型系统第3章 Kotlin 类型类型系统

    第3章 Kotlin 类型类型系统 跟Java、C和C ++ 一样, Kotlin也是“静态类型编程语言”。 Kotlin系统类型分为类型和不可类型。Kotlin中引入了类型,把有可能为null的值单独用类型来表示。这样就在引用与不可引用之间划分出来一条明确的显式的“界线”。 = 1000 >>> a==b true >>> a===b false 我们可以看出,当 a, b 都为类型时, a 跟 b 的引用是不等的。 Kotlin正如很多现代编程语言一样——是安全的。因为我们需要通过一个类型符号 T? 来明确地指定一个对象类型 T 是否能为。 它唯一允许的值是null,被用作任何类型引用。 3.4.3 Any与Any?类型 就像Any是在非类型层次结构的根,Any?是类型层次的根。 Any?是Any的超集,Any?

    2.6K20发布于 2018-08-17
  • 来自专栏blackheart的专栏

    4-类型、静态类

    类型类型是不可以为null的[即不可为值], 假如我们想让它为null呢[比如它对映这数据库中的某个表的某个字段,但是这个字段是null]。 自己实现的话,简单的写一个类,有一个值类型的字段,检查该字段是否初始化,是的话返回该值,否的话返回null。 假如是在C#1.0时,那么每个值类型都要写这么一份代码了。 幸运的是C#2.0带来了一个新的类型[System.Nullable<T>]帮我们实现了,T就是需要传入的类型[约束为值类型]. 比如: Nullable<int> i=null; //简写? T 5 public Nullable(T value); 6 //重载类型转换操作符<显示转换:int i=(int)Nullable<int>类型变量> 7 public value); 8 //重载类型转换操作符<隐式转换:int? i=int类型变量> 9 public static implicit operator T?

    1.1K50发布于 2018-01-19
  • 来自专栏walterlv - 吕毅的博客

    C# 8.0 的引用类型,不止是加个问号哦!你还有很多种不同的玩法

    C# 8.0 引入了引用类型,你可以通过 ? 为字段、属性、方法参数、返回值等添加是否可为 null 的特性。 但是如果你真的在把你原有的旧项目迁移到类型的时候,你就会发现情况远比你想象当中复杂,因为你写的代码可能只在部分情况下,部分情况下不可;或者传入时才可为,传入非时则不可为。 C# 8.0 特性 在开始迁移你的项目之前,你可能需要了解如何开启项目的类型支持: C# 8.0 如何在项目中开启引用类型的支持 - walterlv 引用类型是 C# 8.0 带来的新特性 你可能会好奇,C# 语言的特性为什么在编译成类库之后,依然可以被引用它的程序集识别。 更灵活控制的特性 阻碍你将老项目迁移到类型的原因,可能还有你原来代码逻辑的问题。因为有些情况下你无法完完全全将类型迁移到

    3.2K20编辑于 2023-10-22
  • 来自专栏walterlv - 吕毅的博客

    C# 引用类型 Nullable 更强制的约束:将警告改为错误 WarningsAsErrors

    于是 C# 8.0 带来的引用类型由于默认以警告的形式出现,所以实际上约束力非常弱。 本文将把 C# 8.0 的引用类型警告提升为错误,以提高约束力。 启用引用类型 你需要先在你的项目中启用引用类型的支持,才能修改警告到错误: C# 8.0 如何在项目中开启引用类型的支持 - 吕毅 项目属性 在项目属性中设置是比较快捷直观的方法。 1 NU1605;CS8600;CS8602;CS8603;CS8604;CS8618;CS8625 这些值的含义可以参考我的另一篇博客: C# 8.0 引用类型中的各项警告和错误 - 吕毅 记得在改之前 这些值的含义可以参考我的另一篇博客: C# 8.0 引用类型中的各项警告和错误 - 吕毅 参考资料 Switch to errors instead of warnings for nullable

    1K30编辑于 2023-10-22
  • 来自专栏me的随笔

    .NET中类型实现原理

    下面通过自定义一个类型来讲解Nullable<T>的实现原理。 ,下面我们来创建类型的实例来验证下。 null to 'XfhNullable<int>' because it is a non-nullable value type这是因为编译器把我们定义的结构体XfhNullable<T>看作是普通值类型而非类型 ,所以我们还要添加类型和XfhNullable<T>之间的转换功能。 换句话说,Nullable<T>只是在逻辑层面上实现了把null赋值给值类型,给我们一种值类型可为null的感觉。 最后说下类型的装箱与拆箱。

    1.6K20发布于 2018-09-05
  • 来自专栏技术博客

    C#基础知识系列二(值类型引用类型类型、堆和栈、装箱和拆箱)

    前言   之前对几个没什么理解,只是简单的用过类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处。    不过这里我们可以看一下类型 类型 类型可以表示基础类型的所有值,另外还可以表示 null 值。 类型可通过下面两种方式中的一种声明: System.Nullable<T> variable T? variable T 是类型的基础类型。 T 可以是包括 struct 在内的任何值类型;但不能是引用类型。 1.值类型后加问号表示此类型类型,如int? i = null; int? 3.比较类型时,只要一个操作数为null,比较结果就为false。 ? 值类型引用类型在赋值(或者说复制)的时候也是有区别的。

    1.6K41发布于 2018-08-31
  • 来自专栏技术博客

    C#基础知识系列二(值类型引用类型类型、堆和栈、装箱和拆箱)

    前言   之前对几个没什么理解,只是简单的用过类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处。    不过这里我们可以看一下类型 类型 类型可以表示基础类型的所有值,另外还可以表示 null 值。 类型可通过下面两种方式中的一种声明: System.Nullable<T> variable T? variable T 是类型的基础类型。 T 可以是包括 struct 在内的任何值类型;但不能是引用类型。 1.值类型后加问号表示此类型类型,如int? i = null; int? 3.比较类型时,只要一个操作数为null,比较结果就为false。 ? 值类型引用类型在赋值(或者说复制)的时候也是有区别的。

    1.5K10发布于 2019-02-25
  • 来自专栏韩曙亮的移动开发专栏

    【Kotlin】安全 ① ( Kotlin 的安全机制 | 变量空性 | 默认变量不可赋值 | 声明类型变量 )

    文章目录 一、Kotlin 的安全机制 二、变量空性 1、默认变量不可赋值 2、声明类型变量 一、Kotlin 的安全机制 ---- Java 中的指针问题 : 在 Java 语言 Kotlin 程序的 代码健壮性 ; 二、变量空性 ---- 1、默认变量不可赋值 在 Java 中 , 引用类型的变量 默认为 null 值 ; 但是在 Kotlin 中 , 变量默认不可为 赋值一个值 , 除非 将该变量声明为 类型 ; 2、声明类型变量 声明类型变量 : 如果要声明一个 类型的变量 , 必须 声明该变量的具体的类型 , 并在该类型后添加 ? 类型 , 此时就可以为 该变量 赋值 null 值 ; fun main() { var name: String? 类型声明后 , 在 IntelliJ IDEA 中 , 就不再进行报错了 ;

    3K20编辑于 2023-03-30
  • 来自专栏DotNet 致知

    类型及其衍生运算符

    这节讲一下C#类型(Nullable) 我们知道,值类型在使用前必须设置值,而引用类型则可以是null,但在某些情况下,为值类型设置为是必要的(如处理数据库数据的时候),微软因此推出了类型 在声明和使用中,以下两种情况是不允许的: 以下情况则可以(了解VS的同学会知道,类型颜色变灰说明此处可以简化,这就涉及到它的一个衍生运算符,我们后边讲): 类型,可以像引用类型一样 类型很有用,为此微软新添了一批语法,声明类型,可以使用一下语法: T? 运算符 为了进一步简化处理类型的代码量,微软引入 ?? 运算符 为了避免类型或者引用类型引用时引发的NullReferenceException异常,微软又引入了 ?.

    68920编辑于 2022-03-29
  • 来自专栏walterlv - 吕毅的博客

    C# 8.0 引用类型中的各项警告错误的含义和示例代码

    C# 8.0 引入了可为引用类型和不可为引用类型。当你需要给你或者团队更严格的要求时,可能需要定义这部分的警告和错误级别。 本文将介绍 C# 引用类型部分的警告和错误提示,便于进行个人项目或者团队项目的配置。 开启引用类型以及配置警告和错误 本文的内容本身没什么意义,但如果你试图进行一些团队配置,那么本文的示例可能能带来一些帮助。 C# 8.0 如何在项目中开启引用类型的支持 - 吕毅 C# 引用类型 NullableReferenceTypes 更强制的约束:将警告改为错误 WarningsAsErrors - 吕毅 警告和错误 如果 T 是引用类型,那么 default 就会将这个泛型类型赋值为 null。然而并没有将泛型 T 的使用写为 T?。

    2.3K20编辑于 2023-10-22
  • 来自专栏一个会写诗的程序员的博客

    Java 8中的Optional 类型与 Kotlin 中的类型Java 8中的Optional 类型与 Kotlin 中的类型Kotlin 中的类型《Kotlin极简教程》正式上架:

    Java 8中的Optional 类型与 Kotlin 中的类型 在 Java 8中,我们可以使用 Optional 类型来表达类型。 toUpperCase(); Swift 也有类似的语法, 只作用在 Optional 的类型上。 Kotlin 中的类型 上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了: package com.easy.kotlin fun main(args: Array<String

    3.4K10发布于 2018-08-17
领券