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

索引器的用法

转载: C#索引器 - Coder.Shen - 博客园

索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。

索引器和数组比较:

(1)索引器的索引值(Index)类型不受限制

(2)索引器允许重载

(3)索引器不是一个变量

索引器和属性的不同点

(1)属性以名称来标识,索引器以函数形式标识

(2)索引器可以被重载,属性不可以

(3)索引器不能声明为static,属性可以

 

一个简单的索引器例子

复制代码
using System;
using System.Collections;

public class IndexerClass {private string[] name = new string[2];//索引器必须以this关键字定义,其实这个this就是类实例化之后的对象public string this[int index]{//实现索引器的get方法get{if (index < 2){return name[index];}return null;}//实现索引器的set方法set{if (index < 2){name[index] = value;}}} } public class Test {static void Main(){//索引器的使用IndexerClass Indexer = new IndexerClass();//“=”号右边对索引器赋值,其实就是调用其set方法Indexer[0] = "张三";Indexer[1] = "李四";//输出索引器的值,其实就是调用其get方法Console.WriteLine(Indexer[0]);Console.WriteLine(Indexer[1]);} }
复制代码

 以字符串作为下标,对索引器进行存取

复制代码
public class IndexerClass
{//用string作为索引器下标的时候,要用Hashtableprivate Hashtable name = new Hashtable();//索引器必须以this关键字定义,其实这个this就是类实例化之后的对象public string this[string index]{get { return name[index].ToString(); set { name.Add(index, value); }}
}
public class Test
{static void Main(){IndexerClass Indexer = new IndexerClass();Indexer["A0001"] = "张三";Indexer["A0002"] = "李四";Console.WriteLine(Indexer["A0001"]);Console.WriteLine(Indexer["A0002"]);}
}
复制代码

 索引器的重载

复制代码
public class IndexerClass
{private Hashtable name = new Hashtable();//1:通过key存取Valuespublic string this[int index]{get { return name[index].ToString(); }set { name.Add(index, value); }}//2:通过Values存取keypublic int this[string aName]{get{//Hashtable中实际存放的是DictionaryEntry(字典)类型,如果要遍历一个Hashtable,就需要使用到DictionaryEntryforeach(DictionaryEntry d in name){if (d.Value.ToString() == aName){return Convert.ToInt32(d.Key);}}return -1;}set{name.Add(value, aName);}}
}
public class Test
{static void Main(){IndexerClass Indexer = new IndexerClass();//第一种索引器的使用Indexer[1] = "张三";//set访问器的使用Indexer[2] = "李四";Console.WriteLine("编号为1的名字:" + Indexer[1]);//get访问器的使用Console.WriteLine("编号为2的名字:" + Indexer[2]);Console.WriteLine();//第二种索引器的使用Console.WriteLine("张三的编号是:" + Indexer["张三"]);//get访问器的使用Console.WriteLine("李四的编号是:" + Indexer["李四"]);Indexer["王五"] = 3;//set访问器的使用Console.WriteLine("王五的编号是:" + Indexer["王五"]);}
}
复制代码

 多参索引器

复制代码
using System;
using System.Collections;//入职信息类
public class EntrantInfo
{//姓名、编号、部门private string name;private int number;private string department;public EntrantInfo(){}public EntrantInfo(string name, int num, string department){this.name = name;this.number = num;this.department = department;}public string Name{get { return name; }set { name = value; }}public int Num{get { return number; }set { number = value; }}public string Department{get { return department; }set { department = value; }}
}//声明一个类EntrantInfo的索引器
public class IndexerForEntrantInfo
{private ArrayList ArrLst;//用于存放EntrantInfo类public IndexerForEntrantInfo(){ArrLst = new ArrayList();}//声明一个索引器:以名字和编号查找存取部门信息public string this[string name, int num]{get{foreach (EntrantInfo en in ArrLst){if (en.Name == name && en.Num == num){return en.Department;}}return null;}set{//new关键字:C#规定,实例化一个类或者调用类的构造函数时,必须使用new关键ArrLst.Add(new EntrantInfo(name, num, value));}}//声明一个索引器:以编号查找名字和部门public ArrayList this[int num]{get{ArrayList temp = new ArrayList();foreach (EntrantInfo en in ArrLst){if (en.Num == num){temp.Add(en);}}return temp;}}//还可以声明多个版本的索引器...
}public class Test
{static void Main(){IndexerForEntrantInfo Info = new IndexerForEntrantInfo();//this[string name, int num]的使用Info["张三", 101] = "人事部";Info["李四", 102] = "行政部";Console.WriteLine(Info["张三", 101]);Console.WriteLine(Info["李四", 102]);Console.WriteLine();//this[int num]的使用foreach (EntrantInfo en in Info[102]){Console.WriteLine(en.Name);Console.WriteLine(en.Department);}}
}
复制代码
http://www.hskmm.com/?act=detail&tid=9671

相关文章:

  • 《sklearn机器学习——特征提取》 - 指南
  • Windows 10 11 Boot Fix
  • ubuntu 安装 milvus
  • 面向多模态检索的向量数据库对比分析和技术选型:Elasticsearch、Milvus、Pinecone、FAISS、Chroma、PGVector、Weaviate、Qdrant
  • 单词翻转
  • 终结AI幻觉:Amazon Bedrock如何用形式化方法重塑可信AI
  • 我代表编程导航,向大家道歉!
  • cf div2 1051 E(视角转换,构造+思维)
  • 从“被动监控”到“主动优化”:MyEMS 重构能源管理价值的路径
  • phoenix 导出sql执行结果到文件中
  • 论文解读-《Graph Retrieval-Augmented Generation A Survey》 - zhang
  • AI编程问题处理与传统网页搜索对比分析
  • APP 内测分发的核心逻辑与流程,虾分发让效率翻倍
  • WPF Canvas 网格线背景样式
  • C++ 最开始的地方
  • ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
  • 常见开源安全工具列表
  • ARC187 做题记
  • SAP物料自动记账科目设置总结
  • SpringBoot启动流程
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • 移远模组使用移远云平台对接指令
  • 解码C语言关键字
  • 接龙大师微信小程序管理系统:一站式社群信息收集与活动管理解决方案
  • Windows环境中安装Zookeeper
  • YOLOv7安全评估揭示11个漏洞:RCE攻击与模型差异风险
  • ​​电流探头选型技术指南:精准捕获电流信号的艺术​​
  • 读人形机器人16本地制造的环境和经济效益
  • 详细介绍:【卷积神经网络详解与实例】10——经典CNN之GoogLeNet
  • openEuler 24.03 (LTS-SP2)安装mysql 8.4.5(glib.2.17)