学懂C#编程:常用高级技术——学会泛型与集合(一)

        C# 中的泛型和集合是两个非常重要的概念,它们极大地增强了代码的灵活性和可重用性。下面我将详细讲解这两个概念。

一、泛型 (Generics)
        泛型允许你在定义类、接口、方法或委托时使用类型参数,从而使这些类型或方法可以在不指定具体类型的情况下工作。泛型提高了代码的重用性,增强了类型安全性,并减少了类型转换的需要。

1、泛型类
示例:

public class GenericClass<T>
{
    private T _value;
 
    public GenericClass(T value)
    {
        _value = value;
    }
 
    public T GetValue()
    {
        return _value;
    }
}
 
class Program
{
    static void Main()
    {
        GenericClass<int> intGeneric = new GenericClass<int>(10);
        Console.WriteLine(intGeneric.GetValue()); // 输出: 10
 
        GenericClass<string> stringGeneric = new GenericClass<string>("Hello");
        Console.WriteLine(stringGeneric.GetValue()); // 输出: Hello
    }
}


2、泛型方法
示例:

public class GenericMethod
{
    public static void Print<T>(T value)
    {
        Console.WriteLine(value);
    }
}
 
class Program
{
    static void Main()
    {
        GenericMethod.Print(10); // 输出: 10
        GenericMethod.Print("Hello"); // 输出: Hello
    }
}

3、泛型约束
你可以通过泛型约束来限制类型参数必须满足的条件。

示例:

public class GenericClassWithConstraint<T> where T : IComparable<T>
{
    private T _value;
 
    public GenericClassWithConstraint(T value)
    {
        _value = value;
    }
 
    public T GetValue()
    {
        return _value;
    }
 
    public bool IsGreaterThan(T other)
    {
        return _value.CompareTo(other) > 0;
    }
}
 
class Program
{
    static void Main()
    {
        GenericClassWithConstraint<int> intGeneric = new GenericClassWithConstraint<int>(10);
        Console.WriteLine(intGeneric.IsGreaterThan(5)); // 输出: True
    }
}

二、集合 (Collections)
        C# 提供了多种集合类型,用于存储和操作一组对象。这些集合类型包括数组、列表、队列、栈、字典等。

1、数组 (Array)
数组是最基本的集合类型,它具有固定大小。

示例:

int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
 
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

2、列表 (List)
列表是一种动态数组,它的大小可以动态调整。

示例:

using System.Collections.Generic;
 
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
numbers.Add(4);
numbers.Add(5);
 
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

3、队列 (Queue)
队列是一种先进先出 (FIFO) 的数据结构。

示例:

using System.Collections.Generic;
 
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
 
while (queue.Count > 0)
{
    Console.WriteLine(queue.Dequeue());
}


4、栈 (Stack)
栈是一种后进先出 (LIFO) 的数据结构。

示例:

using System.Collections.Generic;
 
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);
 
while (stack.Count > 0)
{
    Console.WriteLine(stack.Pop());
}


5、字典 (Dictionary)
字典是一种键值对集合,可以通过键快速查找值。

示例:

using System.Collections.Generic;
 
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("one", 1);
dictionary.Add("two", 2);
dictionary.Add("three", 3);
 
foreach (var item in dictionary)
{
    Console.WriteLine($"{item.Key}: {item.Value}");
}


6、泛型集合
泛型集合是 C# 中推荐的集合类型,因为它们提供了类型安全性和性能优势。

示例:

using System.Collections.Generic;
 
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
Queue<string> queue = new Queue<string>();
queue.Enqueue("first");
queue.Enqueue("second");
Stack<double> stack = new Stack<double>();
stack.Push(1.1);
stack.Push(2.2);
Dictionary<int, string> dictionary = new Dictionary<int, string>
{
    { 1, "one" },
    { 2, "two" },
    { 3, "three" }
};
 
foreach (int number in numbers)
{
    Console.WriteLine(number);
}
 
while (queue.Count > 0)
{
    Console.WriteLine(queue.Dequeue());
}
 
while (stack.Count > 0)
{
    Console.WriteLine(stack.Pop());
}
 
foreach (var item in dictionary)
{
    Console.WriteLine($"{item.Key}: {item.Value}");
}

通过这些示例,你可以看到泛型和集合在 C# 中的强大功能和灵活性。它们是现代 C# 编程中不可或缺的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/765840.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SHA1算法

什么是SHA1算法&#xff08;Secure Hash Algorithm&#xff09; SHA1算法也是一种哈希算法&#xff0c;也称单向散列算法&#xff0c;不可逆&#xff0c;适用于数字签名标准。与MD5大同小异。 算法流程 &#xff08;1&#xff09;明文处理&#xff0c;对明文进行填充&#x…

一文揭秘:CRM如何助力家居建材企业可持续发展?

01、家居建材行业业务高速发展&#xff0c;对数字化转型提出越来越高诉求 家居建材行业是国民经济的重要基础产业&#xff0c;是改善人居条件、治理生态环境和发展循环经济的重要支撑。家居建材是土木工程和建筑工程中使用材料的统称&#xff0c;包括天花板、瓷砖、门、窗、锁…

【Rust基础入门】Hello Cargo

文章目录 前言Cargo是什么&#xff1f;Cargo的作用查看cargo版本使用cargo创建项目Cargo.toml文件cargo build命令cargo runcargo check为发布构建 总结 前言 在Rust编程中&#xff0c;Cargo扮演着至关重要的角色。它是Rust的包管理器&#xff0c;负责处理许多任务&#xff0c…

echarts用pictorialBar实现3D柱状图

先看下效果 实现思路 描绘一个普通的柱状图通过象形柱图&#xff08;pictorialBar&#xff09;在柱状图的顶部添加一个图形类型&#xff08;symbol&#xff09;菱形 代码实现 <template><div id"symbolBar"></div> </template> <scrip…

[数据集][目标检测]金属架螺栓螺丝有无检测数据集VOC+YOLO格式857张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;857 标注数量(xml文件个数)&#xff1a;857 标注数量(txt文件个数)&#xff1a;857 标注类别…

代码随想录Day67(图论 part04)

110.字符串接龙 题目&#xff1a;110. 字符串接龙 (kamacoder.com) 思路&#xff1a;没有思路 答案 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String beginStr sc…

简单分享 for循环,从基础到高级

1. 基础篇&#xff1a;Hello, For Loop! 想象一下&#xff0c;你想给班上的每位同学发送“Hello!”&#xff0c;怎么办&#xff1f;那就是for循环啦&#xff0c; eg&#xff1a;首先有个名字的列表&#xff0c;for循环取出&#xff0c;分别打印 names ["Alice", …

Firefox 编译指南2024 Windows10篇- 编译Firefox(三)

1.引言 在成功获取了Firefox源码之后&#xff0c;下一步就是将这些源码编译成一个可执行的浏览器。编译是开发流程中的关键环节&#xff0c;通过编译&#xff0c;我们可以将源代码转换为可执行的程序&#xff0c;测试其功能&#xff0c;并进行必要的优化和调试。 对于像Firef…

Datawhale - 角色要素提取竞赛

文章目录 赛题要求一、赛事背景二、赛事任务三、评审规则1.平台说明2.数据说明3.评估指标4.评测及排行 四、作品提交要求五、 运行BaselineStep1&#xff1a;下载相关库Step2&#xff1a;配置导入Step3&#xff1a;模型测试Step4&#xff1a;数据读取Step5&#xff1a;Prompt设…

不要再被骗了!电脑无法进入系统的原因可能是这个硬件坏了而已……

前言 前段时间小白在抖音上发了很多很多很多的视频&#xff0c;其中应该是有很多商家关注了小白。 然后就会出现很多很多很多的赚钱小门道…… 电脑开机没有显示&#xff1f;换显卡&#xff01; 电脑还是不开机&#xff1f;换CPU 电脑还是一样不开机…… 经过了一番大折腾…

电脑录音方法:电脑怎么录音?5招轻松搞定录音!

想要从麦克风或系统音频录制电脑声音吗&#xff1f;这是一项简单的任务。本文将为您介绍5种最佳且最简单的方法&#xff0c;包括使用Windows系统自带的录音工具来录制电脑音频&#xff0c;在线音频录音软件和专业的第三方电脑录音软件。这些工具都能够很好地帮助您完成电脑怎么…

【深度学习】循环神经网络RNN、LSTM、GRU

李宏毅深度学习笔记 https://www.bilibili.com/video/BV1qM4y1M7Nv RNN 在 RNN 里面&#xff0c;每一次隐藏层的神经元产生输出的时候&#xff0c;该输出会被存到记忆元。下一次有输入时&#xff0c;这些神经元不仅会考虑输入 x1, x2&#xff0c;还会考虑存到记忆元里的值。 …

高危行业的安全守护者,顶坚防爆手机无惧挑战

高危行业的安全守护者&#xff0c;防爆手机以卓越性能&#xff0c;无惧极端挑战&#xff0c;为每一位前线工作者筑起坚不可摧的安全防线。石油勘探的深邃海洋、化工生产的复杂车间、矿山的幽深隧道……这些高危行业中&#xff0c;每一步都需谨慎前行&#xff0c;每一刻都需安全…

技术成神之路:设计模式(二)建造者模式

1.定义 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许你分步骤创建复杂对象&#xff0c;而不必直接调用构造函数。建造者模式特别适合那些包含多个组成部分并且构造过程复杂的对象。 2. 结构 建造者模式的主要组成部分包括&#…

TensorRT动态形状(Dynamic Shape)出错,官方demo+自己模型运行时出错

(2024.7.2) 使用TensorRT处理动态输入形状推理时出现的错误&#xff0c;本案基于官方demo文件&#xff0c;已解决&#xff1a; TensorRT版本10.0&#xff0c;官方例子使用的是这个https://github.com/NVIDIA/trt-samples-for-hackathon-cn/blob/master/cookbook/01-SimpleDem…

数据文件传输连接超时?镭速教你如何解决!

Mysql作为一个广泛使用的开源关系型数据库管理系统&#xff0c;以快速、可靠、易于使用、开源的特色闻名&#xff0c;使用 MySQL 来存储和管理数据&#xff0c;已经广泛应用于各个领域、各类大小型应用中。 图片源于网络 使用 MySQL 来存储和管理数据的应用中&#xff0c;与数…

Windows打开redis以及Springboot整合redis

目录 前言Windows系统打开redisSpringboot整合redis依赖实体类yml配置文件config配置各个数据存储类型分别说明记录string数据写入redis&#xff0c;并查询通过命令行查询 list插入数据到redis中从redis中读取命令读取数据 hash向redis中逐个添加map键值对获取key对应的map中所…

【ubuntu18.04】 局域网唤醒 wakeonlan

ai服务器经常因为断电,无法重启,当然可以设置bios 来电启动。 这里使用局域网唤醒配置。 自动开关机设置 工具:ethtool 端口 : enp4s0 Wake-on: d 表示禁用Wake-on: g 激活 ,例如:ethtool -s eth0 wol g 配置/etc/rc.local ,这个文件不存在,自己创建工具下载 tengxun W…

mysql 命令 —— 查看表信息(show table status)

查询表信息&#xff0c;如整个表的数据量大小、表的索引占用空间大小等 1、查询某个库下面的所有表信息&#xff1a; SHOW TABLE STATUS FROM your_database_name;2、查询指定的表信息&#xff1a; SHOW TABLE STATUS LIKE your_table_name;如&#xff1a;Data_length 显示表…

开放式耳机哪个品牌最好?2024高热度机型推荐,选购不迷茫

选购开放式耳机时&#xff0c;面对琳琅满目的品牌与型号是否感到不知道怎么选择&#xff1f;别担心&#xff0c;作为耳机爱好者与资深评测人&#xff0c;我精心整理了几款热门开放式耳机的全面对比。这次对比不仅涵盖如何挑选&#xff0c;有哪些不要菜类的额点&#xff0c;还推…