当前位置:首页 > 技能相关 > C#与C++ > 正文内容

C# 泛型列表List 基本知识(重点内容)

admin2年前 (2022-12-23)C#与C++2590 修订时间:2022-12-26 19:23:40

一、什么是泛型

  我们直接将对象放入ArrayList,操作直观。但由于集合中的项都是Object类型,因此每次使用都必须就行繁琐的类型转换。那么此时,我们就可以考虑使用泛型来解决。泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入。

      泛型是C# 2.0新增等元素,用于解决一系列如上类似的问题。泛型允许将类名作为参数传递给泛型类型,并生成相应的对象。将泛型(包括类、接口、方法、委托等)看作模板可能更好理解,模板中的变体部分将被作为参数传进来的类名称所代替,从而得到一个新的类型定义。

二、泛型的好处

1、更好的安全性(将运行期的错误转变成编译期);2、更好的可读性;3、省去强转类型的麻烦;

三、如何创建泛型

引入命名空间

System.Collections.Generic

List泛型类创建,语法如下:

List<T> ListOfT = new List<T>();

“T”就是所要使用的类型,即可以是一些简单类型,例:string、int,也可以是用户自定义的类型。

四、泛型示例代码

namespace ConsoleApp1
{
    class Program
    {
        class Person
        {
            public string name; //姓名
            public int age; //年龄
            //创建Person对象
            public Person(string name, int age)
            {
                this.name = name;
                this.age = age;
            }
        }
       static void Main(string[] args)
        {
        //创建Person对象
        Person p1 = new Person("王一", 33);
        Person p2 = new Person("李二", 28);
        Person p3 = new Person("张三", 31);
        //创建类型为Person的对象集合
        List<Person> persons = new List<Person>();
        //将Person对象放入集合
        persons.Add(p1);
        persons.Add(p2);
        persons.Add(p3);
        //输出第2个人的姓名
        Console.WriteLine(persons[1].name);
        Console.Read();
        }
    }
}

泛型集合大大简化了集合的实现代码,通过它,可以轻松创建指定类型的集合。

五、List的方法和属性

1、属性

1.1、Capacity 属性:用于获取或设置List可容纳元素的数量;

//获取集合容纳元素数量
int i = persons.Capacity;
Console.WriteLine(i.ToString());
//设置集合容纳数量
persons.Capacity = 6;
int ii = persons.Capacity;
Console.WriteLine(ii.ToString());

当数量超过容量时,这个值会自动增长。也可以设置这个值以减少容量。

1.2、Count 属性:用于获取数组中当前元素数量;

//获取集合数据数量,非集合容量大小
int i = persons.Count;
Console.WriteLine(i.ToString());

2、方法

2.1、Add( )  方法:在List中添加一个对象的公有方法

//创建Person对象
Person p1 = new Person("王一", 33);
Person p2 = new Person("李二", 28);
Person p3 = new Person("张三", 31);
//创建类型为Person的对象集合
List<Person> persons = new List<Person>();
//将Person对象放入集合
persons.Add(p1);
persons.Add(p2);
persons.Add(p3);

2.2、AddRange( )  方法:公有方法,在List尾部添加实现了ICollection接口的多个元素

//沿用上述的泛型集合代码
//创建类型为Person的对象集合persons2
List<Person> persons2 = new List<Person>();
//将泛型集合persons赋予persons2
persons2.AddRange(persons);

上述代码是将一个泛型集合对象(persons)直接赋予了新的泛型集合对象(persons2),单纯的数据类型集合,也可以使用如下方式:

string[] stringArray = {"王一", "李二", "张三"};
List<string> StrList= new List<string>();
StrList.AddRange(stringArray);

2.3、BinarySearch( )  方法:重载的公有方法,用于在排序的List内使用二分查找来定位指定元素

//该方法对于(包括类、接口、方法、委托等),目前我未实现具体方式,以下为其中一种格式代码,

class Program
{
    static void Main()
    {
        List<string> l = new List<string>();
        l.Add("acorn");      // 0
        l.Add("apple");      // 1
        l.Add("banana");     // 2
        l.Add("cantaloupe"); // 3
        l.Add("lettuce");    // 4
        l.Add("onion");      // 5
        l.Add("peach");      // 6
        l.Add("pepper");     // 7
        l.Add("squash");     // 8
        l.Add("tangerine");  // 9
        // 查找"banana"的索引位置;
        int i = l.BinarySearch("banana");
        Console.WriteLine(i);
        // 查找 "apple"的索引位置;
        i = l.BinarySearch("apple");
        Console.WriteLine(i);
        Console.ReadKey();
    }
}

2.4、Clear( )  方法:在List内移除所有元素

persons.Clear();

2.5、Contains( )  方法:测试一个元素是否在List内

if(persons.Contains(p1))
{
  Console.WriteLine("存在该元素对象。");
}
else
{
  Console.WriteLine("不存在该元素对象!!!");
}

CopyTo( )  方法:重载的公有方法,把一个List拷贝到一维数组内

Exists( )  方法:测试一个元素是否在List内

Find( )  方法:查找并返回List内的出现的第一个匹配元素

FindAll( )  方法:查找并返回List内的所有匹配元素

GetEnumerator( )  方法:重载的公有方法,返回一个用于迭代List的枚举器

Getrange( )  方法:拷贝指定范围的元素到新的List内

IndexOf( )  方法:重载的公有方法,查找并返回每一个匹配元素的索引

Insert( )  方法:在List内插入一个元素

InsertRange( )  方法:在List内插入一组元素

Item( ) 方法:通过指定索引获取或设置元素。对于List类来说,它是一个索引器。

LastIndexOf( )  方法:重载的公有方法,,查找并返回最后一个匹配元素的索引

Remove( )  方法:移除与指定元素匹配的第一个元素

RemoveAt( )  方法:移除指定索引的元素

RemoveRange( )  方法:移除指定范围的元素

Reverse( )  方法:反转List内元素的顺序

Sort( )  方法:对List内的元素进行排序

ToArray( )  方法:把List内的元素拷贝到一个新的数组内

trimToSize( )  方法:将容量设置为List中元素的实际数目

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=267

分享给朋友:

相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。