首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET中的非泛型集合是否已过时?

是的,在.NET中,非泛型集合(即ArrayList和LinkedList)在2018年过时了,因为它们缺乏类型安全性,并且在某些情况下可能导致错误。从.NET 4.6开始,可以使用System.Collections.Generic命名空间中的ListDictionary类型,这些类型具有泛型参数,可以确保类型安全性和更好的性能。

List<int>Dictionary<string, int>等泛型集合可以在编译时保证类型安全,并且可以根据需要自动进行类型转换。此外,使用泛型集合还可以避免装箱和拆箱操作,从而提高性能。

因此,如果您需要编写类型安全的代码,请使用泛型集合。如果需要高性能和灵活性,请使用非泛型集合。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET中的泛型集合

集合总体可以分为以下几类: 关联/非关联型集合,顺序/随机访问集合,顺序/无序集合,泛型/非泛型集合,线程集合。...各集合类底层接口关系图 泛型与非泛型集合类的分析 泛型集合是类型安全的,基于固定的泛型T,运行时不需要像非泛型的执行Object和具体类型的类型转换。 泛型集合的效率相对较高。...非关联性泛型集合类 非关联性集合就是不用key操作的一些集合类,通常我们可以用元素本身或者下标来操作。FCL主要为我们提供了以下几种非关联性的泛型集合类。...Stack 后进先出的队列 不支持按下标访问 Queue 先进先出的队列 不支持按下标访问 附录B .NET中的泛型集合 .NET中包含很多泛型集合,并且随着时间的推移列表还在增长。...本附录涵盖了最重要的泛型集合接口和类,但不会涉及System.Collections、System.Collections.Specialized和System.ComponentModel中的非泛型集合

19320

什么是泛型以及在集合中泛型的使用

大家好,又见面了,我是你们的朋友全栈君。 什么是泛型? 泛型最常与集合使用,因为泛型最开始开始被加入Java就是为了解决集合向下转型一类问题的。...如果我们有这样一个需求:定义一个描述类圆,要求圆中的数据类型是不确定的,也就是声名属性的时候,属性类型是不确定的。比如描述类圆中有半径,要求半径可以用int,也可以用double。...集合中泛型的使用 List中使用泛型 在我们创建集合时使用来声明List集合只能保存Dog类对象 List dogs=new ArrayList(); 创建Dog类对象 Dog dog1...= new Dog(“101”,“来福”); 添加Dog对象到集合中 dogs.add(dog1);//此时dogs集合中只能存放Dog类对象 public class ListTest {...Dog类型 总结: 在集合中使用泛型的目的就是为了解决向下转型的问题,在泛型具体化之后,集合只能存储与泛型具体化之后的类型。

2.1K20
  • Java集合、数组与泛型中的几个陷阱,你掉进了几个?

    本文字数:4300 字 阅读本文大概需要:12分钟 下面我总结了集合、泛型、数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获。 1、List ,List 是一个泛型,在没有赋值之前,是可以接受任何集合的赋值的,我想这点大家都知道,但是请注意,赋值之后就不能往里面添加元素了,提示如下错误: 所以 List泛型 List 只能放置一种类型,如果你采用 List 来放置多种类型,然后再进行类型强制转换的话,那会失去了泛型的初衷。 为了能够放置多种类型,于是有了 的参数不同,为什么会重载不通过呢? 实际上在 Java 的泛型中,泛型只存在于源码中,在编译后的字节码中,泛型已经被替换为原生类型了,并且在相应的地方插入了强制转换的代码。...实际上,此 ArrayList 非彼 ArrayList,这个返回的 ArrayList 实际上是 Arrays 的一个内部类。

    89330

    Java集合、数组与泛型中的几个陷阱,你掉进了几个?

    下面我总结了集合、泛型、数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获。 1、List ,List 与 List 有区别吗?...> 是一个泛型,在没有赋值之前,是可以接受任何集合的赋值的,我想这点大家都知道,但是请注意,赋值之后就不能往里面添加元素了,提示如下错误: ? 所以 List泛型 List 只能放置一种类型,如果你采用 List 来放置多种类型,然后再进行类型强制转换的话,那会失去了泛型的初衷。 为了能够放置多种类型,于是有了 泛型与重载 我们先来看一道题,你觉得下面这道题能够编译通过吗?...两个方法的参数不同,为什么会重载不通过呢? 实际上在 Java 的泛型中,泛型只存在于源码中,在编译后的字节码中,泛型已经被替换为原生类型了,并且在相应的地方插入了强制转换的代码。

    82120

    在C++中反射调用.NET(三) 使用非泛型集合的委托方法C++中的列表对象list C++传递集合数据给.NET创建泛型List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++CLI

    使用非泛型集合的委托方法 先看看.NET类中的一个返回列表数据的方法: //返回List或者数组,不影响 C++调用 public List GetUsers(string...,好在IEnumerable也是继承 IEnumerable 的,所以可以当做非泛型对象在C++中访问,因此创建上面的委托方法是可行的。...创建泛型List实例 我们使用List来做集合对象,在C#中,我们可以通过下面的方式得到List泛型的类型,然后进一步创建泛型对象实例: Type t= typeof(List); 但是,对应的C+...List的类型,但我们并不知道这个List具体的形参类型,所以这个泛型List还是无法直接使用,幸好,泛型List也是继承自非泛型的IList接口的,所以在 CreateGenericList 方法中将泛型...一切准备就绪,下面可以通过以下步骤提交集合数据给.NET方法了: 1,反射.NET方法,获取参数的泛型形参类型; 2,创建此泛型形参的泛型List对象实例; 3,遍历C++集合(列表list),将结构数据赋值给动态创建的实体类对象

    9.1K100

    C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合List有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享。...1.关于Func Func是一种有任意个输入参数,有一个返回值的委托,在使用的过程中,Func,前n-1个是输入参数类型,第N个是输出参数类型。...如Fun compare=(x,y)=>{return x>y;}; 表示定义一个 两个输入参数为int类型的,输出类型为bool类型的委托。 2.Where() ?...可以看到 以List为例子,改where的参数为Func的委托,也就是说是一个输入值为string类型,输出为bool类型的委托。...如果返回为真,则该元素会被添加到IEnumerable中,通过对IEnumerable的遍历,可以将符合条件的每个元素输出。

    1.9K100

    设计规则

    设计规则支持遵从 .NET Framework 设计准则。 本节内容 规则 描述 CA1000:不要在泛型类型中声明静态成员 调用泛型类型的静态成员时,必须指定该类型的类型参数。...CA1002:不要公开泛型列表 Collections.Generic.List)>) 是针对性能(而非继承)设计的泛型集合。 因此,List 不包含任何虚拟成员。...应改为公开针对继承设计的泛型集合。...CA1003:使用泛型事件处理程序实例 某个类型包含的委托返回 void,该委托的签名包含两个参数(第一个参数是对象,第二个参数是可以分配给 EventArgs 的类型),而且包含程序集针对的是 .NET...CA1010:集合应实现泛型接口 若要扩大集合的用途,应实现某个泛型集合接口。 然后,可以使用该集合来填充泛型集合类型。

    2K20

    泛型

    不过,这4项用途足以表明泛型特性已经深入C#开发人员的日常工作中了。以集合为例来展现泛型的诸多优势,可谓再合适不过了。可以通过对比.NET 1中的普通集合和.NET 2中的泛型集合来充分体会。...2.1.1 示例:泛型诞生前的集合 .NET 1有如下3大类集合。数组:语言和运行时直接支持数组。数组的大小在初始化时就已经确定。普通对象集合:API中的值(或者键)由System.Object描述。...比如前面提到C# 2中的泛型接口IEnumerable,它和.NET 1.0中的非泛型接口IEnumerable就属于不同类型。...有些类型成员因为使用了其他泛型类型,看似泛型成员,但实际不是。只需记住一条原则:判断一个声明是否是泛型声明的唯一标准,是看它是否引入了新的类型形参。...每个封闭的、已构造类型都会被单独初始化,并且拥有各自的静态域。代码清单2-8是一个非常简单的、非线程安全的泛型计数器。

    1.5K10

    Java 语言基础 (常用类的概述和使用, String 类的概述和使用, 可变字符串类和日期相关类, 集合类库)

    c1.contains(c2) 判断集合 c1 中是否拥有集合 c2 这个整体为单位的元素。...c1.containsAll(c3) 判断集合 c1 中是否包含集合 c3 中的所有元素,只有集合 c3 中的所有元素都在集合 c1 中出现才会返回 true,否则都是 false。...自定义泛型方法 泛型方法就是我们输入参数的时候,输入的是泛型参数,而不是具体的参数。我们在调用这个泛型方法的时需要对泛型参数进行实例化。...所以,以下的自定义泛型类中的方法不属于泛型方法,而且它们不能使用 static 关键字修饰,因为该方法中的 T 需要在 new 对象时才能明确类型: // 泛型类public class Person非泛型方法,不能使用 static public void setGender(E gender) { this.gender = gender; }} 在静态方法中使用泛型参数的时候

    1K30

    go 1.18 系列(1)- 变化说明

    泛型 go1.18 最明显也是最重要的就是泛型,这个新语言有大量未在生产环境中进行测试的新代码,生产环境中部署泛型代码时请谨慎行事。...新的 预声明标识符 comparable是一个接口,表示可以使用==or比较的所有类型的集合!=。它只能用作(或嵌入)类型约束。 有三个使用泛型的实验包可能有用。...当前的泛型实现具有以下已知限制: Go 编译器无法处理泛型函数或方法中的类型声明,计划在 Go 1.19 中取消这个限制。...在 Go 1.18 中,go fix现在删除了 模块声明或稍后在其文件 中的现已过时的// +build行 Gofmt gofmt现在同时读取和格式化输入文件,GOMAXPROCS进行内存限制....Vet vue 现在支持泛型 例如,vet报告格式错误 func Print[T ~int|~string](t T) { fmt.Printf("%d", t) } 因为它会报告非通用等价的格式错误

    2.1K20

    C#泛型方法解析

    这种复杂不仅是对于初学者,对于一些有开发经验的.NET开发者,也是一个不那么容易掌握的特性。    接下来我们来了解一下C#2.0加入的特性:泛型。...使用一个泛型类型并指定类型实参时,实际是在CLR中定义一个新类型对象,新类型对象是从泛型派生自的那个类型派生的。...泛型类在.NET的应用主要在集合类中,大多数集合类在System.Collections.Generic和System.Collections.ObjectModel类中。...具体看一下泛型接口IEnumerable:公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。...以上是对泛型方法的相关概念和约束做了简单的解析,接下来看一下.NET中一些发行方法的具体实现: /// /// 封装一个方法,该方法具有四个参数并且不返回值。

    3.4K90

    【1-3java语言高级】笔记(自己整理原创)

    add(); remove(); Iterator 接口 迭代器 hasNext(); next(); remove(); 增强for循环 for(集合类型 变量名:集合名) 02 泛型 未知的数据类型...不安全 使用泛型 避免类型转换 运行时异常提升成编译异常 泛型的定义 泛型类 public class 类名{} 创建不写泛型 GenericClass gc = new GenericClass...(); 泛型使用Integer类型 GenericClass gc2 = new GenericClass(); 含有泛型的方法 修饰符 泛型> 返回值类型 方法名(参数列表 使用泛型){} public...void method 01(M m){} 传进来什么类型就是什么类型 静态方法不建议创建对象使用 静态方法 通过 类名.方法名(参数)直接使用 含有泛型的接口 定义接口的实现类,实现接口,指定接口的泛型...(key)判断是否包含键值 遍历map keySet() getKey()来获取value entrySet() map内部多个Entry对象取出来存储到Set集合中 entry对象 getkey

    53520

    聊聊C#中的泛型的使用(新手勿入)

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/10029782.html 介绍 C#和.NET中的泛型程序具有强类型集合的许多优点,并为代码提供更高质量和性能提升...泛型是C#语言和公共语言运行库(CLR)中的一个新功能,它将类型参数的概念引入.NET Framework。...泛型类 描述 Collection 泛型集合的基类,可以比较两个泛型对象是否相等...; [简单仿制Example.jpg] 泛型的主要特性 泛型类型的一些重要特征使它们相比传统的非泛型类型具有如下的显著特征: 类型安全 性能 二进制代码复用 类型安全 泛型最重要的特征之一是类型安全性...对于非泛型ArrayList类,如果使用对象类型,则可以向集合中添加任何类型,这些类型有时会导致严重的问题。

    1.7K40

    快速入门系列--CLR--03泛型集合

    .NET中的泛型集合 在这里主要介绍常见的泛型集合,很多时候其并发时的线程安全性常常令我们担忧。因而简述下.NET并发时线程安全特性,其详情请见MSDN。...普通集合都不支持多重并发写操作 部分支持单线程写和并发读操作 同时.NET4添加了大量并发集合 首先介绍常见的泛型集合接口,其大部分都位于System.Collection.Generic...ISet表示唯一值集,包含大量集合操作:交、并、补。 接下来介绍具体的集合泛型集合类型,在实际中需要根据具体场景选择最适合的集合类型。...支持并发的读写和线程安全的迭代,但不同是,其在迭代过程中对字典的改变不能确定是否反应到迭代器上。...小节:在日常工作中,当遇到需要并发操作非集合类型的全局变量时,需要使用锁来处理;而当是集合类型时,就需要使用对应的并行集合类来处理,其能很好的TPL协作在一起。

    77170

    go1.18新特性(翻译)

    =进行比较的所有类型的集合。它只能用作(或嵌入)于类型约束。 有三个使用泛型的实验包可能很有用。...这些包位于x/exp目录中;他们的API不在Go 1规范范围内,随着我们在泛型方面获得更多经验,他们的API可能会发生变化。...golang.org/x/exp/constraints 泛型代码用到的常量,例如constraints.Ordered. golang.org/x/exp/slices 对任何元素类型的切片进行操作的泛型函数集合...golang.org/x/exp/maps 对任何键或元素类型的map进行操作的通用函数集合。 当前版本的泛型实现有以下限制: Go编译器目前无法处理泛型函数或方法中的类型声明。...具有多个元素的union ,不能包含具有非空方法集的interface{}。目前尚不明确这些限制在将来是否会被消除。

    1.5K10

    Go 泛型

    在最新的go1.18版中增加了期盼已久的泛型支持 什么是泛型 泛型是程序设计语言的一种风格或范式。...提升可读性,从编码阶段就显式地知道泛型集合、泛型方法等。 泛型合并了同类型的处理代码提高代码的重用率,增加程序的通用灵活性。 泛型使用示例 泛型切片 预声明标识符 any是空接口的别名。...不允许将类型参数或指向类型参数的指针作为结构类型中的未命名字段嵌入。 同样,不允许在接口类型中嵌入类型参数。 目前尚不清楚这些是否会被允许。...具有多个术语的联合元素可能不包含具有非空方法集的接口类型。 目前尚不清楚这是否会被允许。 总结 函数和 类型声明 的语法 现在接受 类型参数。...参数化函数和类型可以通过在它们后面加上方括号中的类型参数列表来实例化。 新标记~已添加到 运算符和标点符号集中。 预声明标识符 any是空接口的别名。它可以代替 interface{}.

    52430

    给 c# 程序员的十个重要提示

    从集合中选出部分成员时, 通常会创建一个临时集合/列表来保存成员并返回, 例如下面 的代码: public List GetValuesGreaterThan100(List masterCollection..., 可以为过时标记添加一个额外的布尔参数, 在下面的例子中, 客户但程序将编译失败: [Obsolete("This method is deprecated....在 .NET 中编写 LINQ 查询时, 只有当你访问 LINQ 查询的结果时, LINQ 查询才会被执 行, LINQ 的这种特征被称为延迟执行, 不过值得注意的是每访问一次结果, LINQ 查询 都会被执行一次...在 c# 代码中, 如果你像下面的代码一样在 catch 代码块中抛出 ConnectDatabase 方法中出现的异常, 异常的堆栈就会只显示到 RunDataOperation 方法, 这样就会丢失...9: 为泛型添加类型约束 创建泛型类型时, 需要指定提供的泛型类型必须实现指定的参数或者继承自特定的基类时, 可以这样做: class MyGenricClass where T : IMyInterface

    1.1K40
    领券