C#中Ilist与list的区别小结

C#中IList与List的区别小结

在C#中,IList与List是两个常用的接口和类。他们有一些共性,也有一些细微的区别。

IList

IList接口定义了一个表示非泛型列表的对象的协定。它派生自ICollection接口并在其基础上添加了一些访问列表中元素的方法,如索引器和插入/删除等操作。IList支持在列表中插入、删除和访问元素的方法。他的定义如下:

public interface IList : ICollection, IEnumerable
{
  int Add(object value);
  void Clear();
  bool Contains(object value);
  int IndexOf(object value);
  void Insert(int index, object value);
  void Remove(object value);
  void RemoveAt(int index);

  object this[int index] { get; set; }
}

List

List类是一个泛型类,继承自IList, ICollection和IEnumerable,它提供了一个动态数组的实现。List只能存储T类型的数据。List提供了多个构造函数和便捷方法,如Add,Contains和Remove等方法。List使用“数组方式”来存储其元素,因此它可以像一个数组一样按下标访问。一般来说,通常情况下List是比IList更实用的。

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, 
                      IList, ICollection, IEnumerable 
{
  public List();
  public List(int capacity);
  public List(IEnumerable<T> collection);

  public void Add(T item);
  public void AddRange(IEnumerable<T> collection);
  public int BinarySearch(T item);
  public T Find(Predicate<T> match);
  public List<T> FindAll(Predicate<T> match);
  public int FindIndex(Predicate<T> match);
  public bool Remove(T item);
  public void RemoveAt(int index);
  public void RemoveAll(Predicate<T> match);
}

区别小结

IList和List的主要区别是:

  • IList可以被任何类型实现,而List只能包含同一类型的元素;
  • IList定义了非泛型列表成员的接口,如Object的集合,而List是一个泛型列表;
  • List是一个具体的类,IList只是一个接口;
  • 如果不需要直接使用List.Add或List.RemoveAt等方法的话,IList是更佳的选择;

下面的示例代码是展示如何用IList和List分别实现一个简单的数字列表。

示例1 当List只能包含同一类型的元素时,IList也可以包含多种类型的元素

List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);

IList list2 = new List<object>();
list2.Add(1);
list2.Add("Hello World");
list2.Add(3.14);

foreach (var item in list2)
{
    Console.WriteLine(item);
}

示例2 如何用IList和List分别实现一个简单的数字列表

IList<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);
list1.Remove(2);

List<int> list2 = new List<int>();
list2.Add(1);
list2.Add(2);
list2.Add(3);
list2.Remove(2);

foreach (var item in list2)
{
    Console.WriteLine(item);
}

以上就是关于C#中IList与List的区别小结的全部内容,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Ilist与list的区别小结 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#获取图片文件扩展名的方法

    C#获取图片文件扩展名的方法 当我们需要处理图片文件时,有时需要获取到图片文件的扩展名。本篇文章将介绍如何在C#中获取图片文件扩展名的方法。 方法一:使用Path类 使用Path类提供的静态方法GetExtension(string path)可以返回指定路径字符串的扩展名,如下所示: using System.IO; string filePath = &…

    C# 2023年6月1日
    00
  • C# winForm自定义弹出页面效果

    接下来我将详细讲解C# WinForm自定义弹出页面效果的完整攻略。我们可以通过以下步骤实现: 1. 创建自定义控件 首先,我们需要创建一个继承自Panel的自定义控件,并设置其BorderStyle为None,这样就可以去掉控件的边框。 public class CustomPanel : Panel { public CustomPanel() { th…

    C# 2023年5月15日
    00
  • c# Linq常用的小技巧

    C# LINQ 常用小技巧攻略 1. LINQ 是什么? LINQ,全称为 Language Integrated Query,即语言集成查询,是一种将基于对象的查询语言融入到 .NET 编程语言中的技术。LINQ 的核心思想是提供一种简单、一致的查询方式,让开发人员能够直接通过语言本身进行复杂的查询操作。 2. LINQ 的优势 需要使用的用户代码量减少很…

    C# 2023年5月15日
    00
  • 一步步教你如何创建第一个C#项目

    一步步教你如何创建第一个C#项目 在本篇攻略中,我们将一步步地创建一个C#控制台程序。这个项目的功能是输出一个简单的问候语句。接下来我们将逐一介绍。 步骤一:打开Visual Studio 首先,你需要打开Visual Studio。可以在Windows操作系统中通过点击Windows菜单键,输入“Visual Studio”进行搜索并进入该程序;或者通过桌…

    C# 2023年6月6日
    00
  • c#基础系列之System.String的深入理解

    C#基础系列之System.String的深入理解 前言 String 是 C# 中的一个非常重要且常用的数据类型,使用频率很高。本文主要讲解 String 的定义、初始化、赋值、整体替换、部分替换、常见方法、比较方式、特殊字符的处理等。 定义和初始化 定义一个 String 变量,可以使用以下语法: string str; 这样定义的变量不会被初始化,其值…

    C# 2023年6月7日
    00
  • C#编程自学之数据类型和变量一

    C#编程自学之数据类型和变量攻略 1. 概述 本篇攻略主要介绍C#编程中的数据类型和变量,涉及到定义变量、基本数据类型、变量命名规则、数据类型转换等知识点,帮助初学者系统学习。 2. 定义变量 定义变量是C#程序中最基本的操作之一,它用于在内存中分配空间来存储值,包括以下几个步骤: 声明变量类型 给变量赋一个值 使用变量 下面是一个示例: int age; …

    C# 2023年5月31日
    00
  • C#中timer定时器用法实例

    C#中timer定时器用法实例 简介 C#中的timer定时器用于在指定时间间隔内重复执行某些代码,非常常用。下面将详细讲解timer的用法以及两个实例。 用法 C#中的timer定时器主要分为两种:System.Threading.Timer和System.Timers.Timer。这两种timer主要的区别是使用方式不同。下面分别进行介绍。 System…

    C# 2023年6月1日
    00
  • 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解

    下面是对“深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解”的完整攻略: 简介 在多线程编程中,一些同步构造往往是必需的,以便协调不同线程之间的操作,避免出现竞态条件等问题。这篇文章将介绍用Wait和Pulse模拟一些同步构造的方法。 Wait和Pulse概述 Wait和Pulse是.NET Framework中用于协调同步操作的两个重要方法。…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部