当前位置: 首页 > wzjs >正文

dns服务器 域名不存在时 跳转到指定网站网络营销工程师培训

dns服务器 域名不存在时 跳转到指定网站,网络营销工程师培训,英语培训机构网站建设策划书,武汉网站建设开发 棋牌目录 一、C#中的索引器是什么? 二、索引器有什么作用? 1. 增强封装性 2. 提升代码可读性 3. 支持复杂逻辑 三、怎么进行申明 基础语法 重载索引器 四、总结 核心价值 适用场景 注意事项 1. ​数组(Array)​ 2. ​字符…

        

目录

一、C#中的索引器是什么?

二、索引器有什么作用?

1. 增强封装性

2. 提升代码可读性

3. 支持复杂逻辑

三、怎么进行申明

        基础语法

重载索引器

四、总结

核心价值

适用场景

注意事项

1. ​数组(Array)​

2. ​字符串(string)​

3. ​**List**

4. ​**Dictionary**

5. ​**DataRow(ADO.NET)​**

6. ​**SortedList**

7. ​自定义类型(类/结构体)​

注意事项


        在C#编程中,你是否遇到过这样的场景:封装了一个复杂的数据结构,却希望它能像数组一样通过[]符号被轻松访问?或者想要为自定义类型赋予类似ListDictionary的直观元素操作体验?

        索引器(Indexer)正是为此而生。它不仅是C#语法中的一颗“语法糖”,更是一种提升代码表现力的利器。通过索引器,开发者可以隐藏底层数据结构的复杂性,以一致、简洁的语法对外暴露数据访问逻辑。无论是遍历多维矩阵、快速查询键值对,还是为业务模型定制特殊的数据规则,索引器都能让代码变得更加优雅且易于维护。

        本文将从核心概念实际作用实现细节,带你全面掌握C#索引器的使用技巧,并通过常见数据类型(如数组、字典、DataRow等)的案例,揭示其灵活性与实用性。无论你是刚接触索引器的新手,还是希望深化理解的开发者,这里都有你需要的答案。

一、C#中的索引器是什么?

        索引器(Indexer)是C#中一种特殊的成员,允许对象像数组一样通过索引值进行数据访问。它本质上是对对象下标操作符([])的重载,使得开发者可以为自定义类型(如类或结构体)定义类似数组的访问行为。索引器的核心特点是用参数化的属性语法封装内部数据,从而提供更直观的数据访问方式。

        例如,当我们需要像访问数组元素一样访问一个自定义集合对象的元素时,可以通过索引器实现:

MyCollection collection = new MyCollection();
Console.WriteLine(collection[0]); // 通过索引器访问

二、索引器有什么作用?

1. 增强封装性

        通过索引器隐藏内部数据结构(如数组、字典等)的实现细节,对外提供统一的访问接口。例如,一个封装数据库查询结果的类可以通过索引器暴露数据行:

        

public class QueryResult {private DataRow[] _rows;public DataRow this[int index] => _rows[index];
}

2. 提升代码可读性

        使自定义类型的元素访问语法与内置类型(如数组、列表)一致,降低学习成本:

// 传统方法 vs 索引器
var value1 = myObj.GetValueAt(5);  // 方法调用
var value2 = myObj[5];             // 索引器调用

3. 支持复杂逻辑

        可以在getset访问器中添加验证、计算、缓存等逻辑:

public class TemperatureData {private float[] _temps;public float this[int day] {get { return _temps[day % 7]; }  // 实现循环访问set { _temps[day % 7] = value; }}
}

三、怎么进行申明

        基础语法

public class MyClass {// 声明索引器//     返回类型          参数类型        索引public ReturnType this[ParameterType index] {get { /* 返回值逻辑 */ }set { /* 赋值逻辑 */ }}
}

示例:二维索引器

public class Matrix {private int[,] _matrix = new int[10,10];public int this[int row, int col] {get => _matrix[row, col];set => _matrix[row, col] = value;}
}// 使用
Matrix m = new Matrix();
m[3,5] = 100;

重载索引器

        支持通过不同参数类型或数量进行重载:

public class MultiIndexer {// 整数索引public string this[int index] { ... }// 字符串索引public string this[string key] { ... }// 多参数索引public int this[int x, int y] { ... }
}

四、总结

核心价值

  • 使自定义类型拥有类似数组的访问语法
  • 增强代码的可维护性和扩展性
  • 支持参数化数据访问逻辑

适用场景

  • 封装集合类(如自定义List/Dictionary)
  • 多维数据访问(如矩阵、表格)
  • 需要验证或处理访问逻辑的场合

注意事项

  • 避免过度使用导致代码可读性下降
  • 优先考虑使用现有集合类型(如List<T>

        其实在前面我们就已经学到过一些索引器了,接下来我举几个看看: 

1. ​数组(Array)​

        所有C#数组(一维、多维、交错数组)均内置索引器,通过整型索引访问元素:

// 一维数组
int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[0]); // 输出 10// 二维数组
int[,] matrix = new int[2, 2] { { 1, 2 }, { 3, 4 } };
Console.WriteLine(matrix[1, 0]); // 输出 3// 交错数组(数组的数组)
int[][] jagged = { new int[] { 1 }, new int[] { 2, 3 } };
Console.WriteLine(jagged[1][0]); // 输出 2

2. ​字符串(string)​

        字符串通过索引器直接访问字符(只读,因字符串不可变):

string text = "Hello";
char firstChar = text[0]; // 'H'
// text[0] = 'h'; // 错误!字符串不可修改

3. ​**List<T>**

        泛型列表通过整型索引访问元素,支持动态扩容:

List<string> names = new List<string> { "Alice", "Bob" };
Console.WriteLine(names[1]); // 输出 "Bob"
names[0] = "Alex"; // 修改元素

4. ​**Dictionary<TKey, TValue>**

        字典通过键(任意类型)作为索引参数访问值:

Dictionary<string, int> ages = new Dictionary<string, int>();
ages["Alice"] = 25;
Console.WriteLine(ages["Alice"]); // 输出 25

5. ​**DataRow(ADO.NET)​**

   DataRow 通过列名或列索引访问单元格数据:

DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Rows.Add("Alice");DataRow row = table.Rows[0];
string name1 = row["Name"];   // 列名索引
string name2 = row[0];        // 列索引(整型)

6. ​**SortedList<TKey, TValue>**

        有序列表同时支持通过键和整型索引访问元素:

SortedList<int, string> list = new SortedList<int, string>();
list.Add(3, "Three");
list.Add(1, "One");Console.WriteLine(list[3]);       // 键索引 → "Three"
Console.WriteLine(list.Values[0]); // 整型索引 → "One"(按排序顺序)

7. ​自定义类型(类/结构体)​

        自定义类型声明索引器,支持任意参数类型和逻辑:

public class ColorPalette {private string[] _colors = { "Red", "Green", "Blue" };// 整型索引器public string this[int index] {get => _colors[index];set => _colors[index] = value;}// 字符串索引器(通过名称获取颜色)public int this[string name] {get => Array.IndexOf(_colors, name);}
}// 使用
ColorPalette palette = new ColorPalette();
Console.WriteLine(palette[0]);    // 输出 "Red"
Console.WriteLine(palette["Blue"]); // 输出 2
数据类型索引器参数类型返回值类型特点
数组(int[]int元素类型(如 int内置,多维索引
字符串(stringintchar只读
List<T>intT动态扩容
Dictionary<TKey,TValue>TKeyTValue键查找高效
DataRowint 或 stringobject支持列名和列索引
自定义类任意类型(可多参数)任意类型可封装复杂逻辑

注意事项

  1. ​内置索引器不可修改:如数组、字符串的索引器是系统实现的,无法自定义。
  2. ​索引越界:大多数索引器在访问无效索引时会抛出 IndexOutOfRangeException 或 KeyNotFoundException(字典)。
  3. ​性能:字典的索引器(通过键查找)时间复杂度为 O(1),而线性查找的索引器(如 List.IndexOf)为 O(n)。
http://www.dtcms.com/wzjs/176862.html

相关文章:

  • 品牌建设不足怎么表达国内seo工具
  • 个人可以做哪些有意思的网站百度seo新站优化
  • 网站文章内容泰州seo推广公司
  • 网站大图分辨率做多大2023重大新闻事件10条
  • 盐城哪里帮助公司建网址亚马逊关键词快速优化
  • 移动通信网站建设qq营销软件
  • 微信链接的微网站怎么做的seo培训一对一
  • 在哪些网站可以做企业名称预审bt磁力猫
  • 哪里有做独立网站的服务器深圳网站设计专业乐云seo
  • 吉林网站建设百度seo优化推广公司
  • 动态网页案例seo网络优化师就业前景
  • 电脑怎么做网站百度安装
  • 自己不会代码让别人做网站怎么管理网站推广的主要方法
  • 合肥网站制作哪家好灰色关键词代发可测试
  • 移动商城网站开发选择李勇seo的博客
  • 珠海中企网站建设公司大亚湾发布
  • 网站建设都包括哪些班级优化大师官网下载
  • 网站建设哪家好?看这里天津搜狗seo推广
  • 国外做自动化网站上海网站seo策划
  • apple 官网网站模板百度在线下载
  • 济南经三路专业做网站厦门谷歌seo公司有哪些
  • 做网站的公司主营成本应该写啥地推的方法和技巧
  • 做机械设备类网站用什么颜色好无锡网站建设公司
  • 网站做支付需要准备什么条件兰州seo优化
  • html5视频网站源码windows清理优化大师
  • wordpress 子站点函数上海百度推广客服电话
  • 无锡疫情最新规定seo点击工具帮你火21星热情
  • 做网站的软件page搜索引擎排行榜前十名
  • 大学英文网站建设微商引流一般用什么软件
  • 网站支付的功能如何做百度登录页面