手机网站建设的趋势,广州移动网站建设,asp.net网站开发项目源码,痘痘怎么去除有效果目录 一、在集合中存储多个对象理解集合的选择1.列表2.字典3.堆栈4.队列5.集 二、使用Span、索引和范围Span索引范围 处理类型和属性1.特性2.创建自定义特性3.反射 一、在集合中存储多个对象
处理集合的常见类型
类型描述List动态大小的数组#xff0c;可以按索引访问Dictio… 目录 一、在集合中存储多个对象理解集合的选择1.列表2.字典3.堆栈4.队列5.集 二、使用Span、索引和范围Span索引范围 处理类型和属性1.特性2.创建自定义特性3.反射 一、在集合中存储多个对象
处理集合的常见类型
类型描述List动态大小的数组可以按索引访问DictionaryTKey, TValue键值对集合根据键进行快速查找Queue先进先出的队列集合Stack后进先出的栈集合HashSet不包含重复元素的集合LinkedList双向链表集合
理解集合的选择
1.列表
C#中的列表List是一种动态数组可以根据需要自动调整大小。它允许按索引访问、添加、删除和搜索元素。列表提供了丰富的方法和功能使得对集合进行操作变得更加简单和高效。 Lists 提供了泛型支持因此你可以创建包含任意类型元素的列表。
using System;
using System.Collections.Generic;class Program
{static void Main(){// 使用 ListTListint numbers new Listint();numbers.Add(1);numbers.Add(2);numbers.Add(3);foreach (int number in numbers){Console.WriteLine(number);}}
}2.字典
C#中的字典Dictionary是一种键值对集合其中每个键都必须是唯一的。字典提供了快速的键查找功能可以根据键获取对应的值。字典也是动态大小的可以根据需要自动调整大小。通过泛型支持字典可以存储任意类型的键和值。字典提供了丰富的方法和功能如添加、移除和检索键值对等操作使得对键值对数据进行管理变得更加方便和高效。
using System;
using System.Collections.Generic;class Program
{static void Main(){// 使用 DictionaryTKey, TValueDictionarystring, string capitals new Dictionarystring, string();capitals.Add(Japan, Tokyo);capitals.Add(France, Paris);capitals.Add(Italy, Rome);foreach (var country in capitals){Console.WriteLine($The capital of {country.Key} is {country.Value});}}
}3.堆栈
C#中的堆栈Stack是一种后进先出LIFO的数据结构类似于现实生活中的堆放物品的方式。在堆栈中最后一个添加的元素将被最先移除。堆栈提供了 Push 方法用于向堆栈顶部添加元素以及 Pop 方法用于移除并返回顶部的元素。此外你还可以使用 Peek 方法查看但不移除顶部的元素。堆栈通常用于需要按照特定顺序处理数据的场景例如计算表达式、撤销操作等。在C#中你可以使用 System.Collections.Generic 命名空间中的 Stack 类来实现堆栈数据结构。
4.队列
C#中的队列Queue是一种先进先出FIFO的数据结构类似于排队等候的方式。在队列中最先添加的元素将会被最先移除。队列提供了 Enqueue 方法用于向队列尾部添加元素以及 Dequeue 方法用于移除并返回队列头部的元素。此外你还可以使用 Peek 方法查看但不移除队列头部的元素。队列通常用于需要按照特定顺序处理数据的场景例如任务调度、消息传递等。在C#中你可以使用 System.Collections.Generic 命名空间中的 Queue 类来实现队列数据结构。
5.集
在C#中“集”通常指的是集合collection它是一种用于存储和操作多个元素的数据结构。C#中提供了许多不同类型的集合如 List、Dictionary、Queue 和 Stack 等每种集合类型都具有特定的行为和用途。这些集合类型可以帮助开发者更有效地组织和处理数据以及实现各种算法和数据结构。
二、使用Span、索引和范围
Span
Span 结构表示内存中的一段连续元素可以用于高效地操作数组的子集而无需复制数据。在示例中我们创建了一个 Span 对象然后使用 Slice 方法从索引 2 开始截取长度为 3 的片段并遍历输出其中的元素。
// 使用 Span
Spanint numbers new int[] { 1, 2, 3, 4, 5 };
Spanint slice numbers.Slice(2, 3);
foreach (var number in slice)
{Console.WriteLine(number);
}索引
C# 8 引入了索引特性^n 表示倒数第 n 个索引。在示例中我们使用索引特性获取了数组倒数第三个位置的元素并进行输出。
// 索引
int[] array { 1, 2, 3, 4, 5 };
Index index ^3; // 表示倒数第三个索引
Console.WriteLine(array[index]); // 输出 3范围
范围特性用于表示一个从起始索引到结束索引的范围并常用于切片操作。在示例中我们创建了一个范围对象表示从索引 1 到索引 4不包括然后使用它来获取原数组的子数组并遍历输出其中的元素。
// 范围
int[] array { 1, 2, 3, 4, 5 };
Range range 1..4; // 开始于索引 1结束于索引 4不包括
int[] subArray array[range]; // 获取指定范围的子数组
foreach (var number in subArray)
{Console.WriteLine(number);
}处理类型和属性
C#中的反射是指在运行时动态地调查、获取和操作程序集、类型和成员信息的能力。使用反射你可以在程序运行时获取程序集的元数据并且可以使用得到的信息来创建对象、调用方法、访问属性等。
1.特性
在C#中特性Attribute是用于为程序实体如类型、方法、属性等添加元数据的一种机制。特性允许你声明和使用附加到代码元素上的元数据以提供关于它们的额外信息。 特性通常以方括号 [] 表示并可附加到以下内容中程序集、模块、类、枚举、结构、方法、参数、属性、事件。
2.创建自定义特性
自定义特性是通过创建一个类并继承自 System.Attribute 基类来实现的。在自定义特性类中你可以定义构造函数和属性来存储特性的元数据信息。通过为自定义特性类添加特定的应用目标AttributeTargets和其他约束可以控制特性可应用的位置和次数。
在使用自定义特性时你可以在适当的程序实体如方法、类或者属性上使用方括号语法将特性应用到它们上面。这样就可以为这些程序实体添加额外的元数据信息以便在运行时进行检索和使用。
[AttributeUsage(AttributeTargets.Method, AllowMultiple false)]
public class CustomAttribute : Attribute
{private string description;public CustomAttribute(string description){this.description description;}public string Description{get { return description; }}
}
public class MyClass
{[Custom(This is a custom attribute)]public void MyMethod(){// 方法内容}
}3.反射
C#中的反射是一种机制允许程序在运行时动态地检查类型信息、调用方法和访问属性。通过反射你可以在程序执行期间获取类型的成员如字段、方法、属性等和构造函数的信息然后基于这些信息来创建对象、调用方法或者修改属性值。
使用 System.Reflection 命名空间中的类C#提供了丰富的API来支持反射。例如可以使用 Type 类来获取类型信息MethodInfo 类来表示方法信息PropertyInfo 类来表示属性信息等。
反射常用于以下情况
动态加载程序集允许在运行时从外部文件或网络载入程序集。获取类型信息可以获取类型的字段、属性、方法等信息。动态创建对象根据类型来实例化对象。调用方法和属性可以使用 MethodInfo 和 PropertyInfo 等来动态调用方法和访问属性。
当你使用反射时可以做到以下几点
获取类型信息
Type type typeof(MyClass);创建对象实例
object instance Activator.CreateInstance(type);调用方法
MethodInfo methodInfo type.GetMethod(MethodName);
methodInfo.Invoke(instance, null);访问属性
PropertyInfo propertyInfo type.GetProperty(PropertyName);
object propertyValue propertyInfo.GetValue(instance);总之C#中的集合和Span、索引、范围以及反射等功能为开发者提供了丰富的工具和技术帮助他们更高效地处理数据和操作类型信息。通过灵活运用这些功能开发者可以编写出更加动态和强大的程序。在实际开发中根据具体的需求和场景选择合适的集合类型、内存操作方式以及反射机制来实现所需的功能和性能优化是非常重要的。希望本文对你有所帮助祝愿你在C#编程的道路上越走越远