首页
学习
活动
专区
工具
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集合

13820

什么是以及在集合使用

大家好,又见面了,我是你们朋友全栈君。 什么是最常与集合使用,因为最开始开始被加入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类型 总结: 在集合中使用目的就是为了解决向下转型问题,在具体化之后,集合只能存储与具体化之后类型。

2K20

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

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

80020

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

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

85630

在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),将结构数据赋值给动态创建实体类对象

9K100

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.7K100

设计规则

设计规则支持遵从 .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.3K10

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; }} 在静态方法中使用参数时候

98530

C#方法解析

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

3.3K90

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) } 因为它会报告通用等价格式错误

2K20

【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

51220

聊聊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协作在一起。

71270

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.4K10

Go

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

49230

给 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
领券