泛型索引器类代码

news/2024/7/23 18:39:14
最近在做一个管理器类,老总要求里面的Items属性可以用索引器访问,像Dictionary<T>一样;但又要求只读不改。代码刚刚成型,如有好的建议请提出。

 1      /**/ /// <summary>
 2    /// 泛型索引器
 3     /// </summary>
 4    /// <typeparam name="T">泛型</typeparam>
 5    /// <seealso cref="System.Collections.Generic.IEnumerable<T>"/>

 6      public   class  Indexer < T >  : IEnumerable < T >
 7      {
 8        /**//// <summary>
 9        /// 指向要用到
10         /// </summary>

11        private Dictionary<string, T> dict;
12
13        /**//// <summary>
14        /// 遇到错误时报错
15        /// </summary>

16        private bool allowThrowReadError = false;
17
18        /**//// <summary>
19        /// 构造方法
20         /// </summary>
21        /// <param name="dict"></param>
22        /// <param name="allowThrowReadError">遇到错误时报错</param>

23        public Indexer(Dictionary<string, T> dict,bool allowThrowReadError)
24        {
25            this.dict = new Dictionary<string, T>(dict);
26        }

27
28        /**//// <summary>
29        /// 索引器
30         /// </summary>
31        /// <param name="key">键值</param>
32        /// <returns>返回值</returns>
33        /// <typeparam name="T">泛型</typeparam>
34        /// <exception cref="Exception">当allowThrowReadError=true并且Key不存在时报异常</exception>

35        public T this[String key]
36        {
37            get
38            {
39                if (dict == nullthrow new Exception("索引器失效");
40                if (dict.ContainsKey(key))
41                {
42                    return dict[key];
43                }

44                if (allowThrowReadError) throw new Exception("不存在键值");
45                else return default(T);
46            }

47        }

48
49        /**//// <summary>
50        /// 数目
51         /// </summary>

52        public int Count
53        {
54            get return dict.Count; }
55        }

56
57        IEnumerator<T> IEnumerable<T>.GetEnumerator()
58        {
59            return dict.Values.GetEnumerator();
60        }

61
62        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
63        {
64            return dict.Values.GetEnumerator();
65        }

66

使用设计管理器时的代码:
管理器的属性定义为

转载于:https://www.cnblogs.com/cgzwwy/archive/2008/07/18/Indexer_Code.html


http://www.niftyadmin.cn/n/1100687.html

相关文章

别克城市-Excelle凯越HRV-视频混编大赛

转载于:https://www.cnblogs.com/nasa/archive/2008/07/19/1246452.html

git 第一次上传项目GIT

第一次上传项目教程&#xff1a; git上创建库 记录上传地址如&#xff1a;https://github.com/**&#xff08;你的仓库地址&#xff09; 找到项目根目录&#xff08;idea打开项目Terminal窗口直接一步一步执行下面命令即可&#xff09; 1. git init // 初始化git 2. git a…

Asp.net 2.0的TreeView客户端个性化控制

ASP.NET 2.0 的 TreeView 控件功能虽说强大,但其客户端控制很逊色,本文将讲解 TreeView 的客户端实现原理,并实现两个个性化操作&#xff1a; (1) 节点的全部打开和关闭; TreeNode Expand(or Collapse) all (2) 只打开一个节点(关闭其他兄弟节点)。 just one node expanded(wh…

idea常用注解集合让你的代码飞起来吧

Plugins 想用更多的插件请点击&#xff1a;IDEA插件官网 CodeGlance 将类似于Sublime中的代码的微型地图嵌入到编辑器窗格中。使用您自定义的颜色对亮色和深色主题进行语法突出显示。GenerateAllSetter 一键调用一个对象的所有的set方法JRebel and XRebel for IntelliJ &quo…

图片轮显

要实现这个功能的话 一般都是先建立一个图片名字的数组 var picarraynew Array(); var nownum0; 用数据填充数组 picarray[0]"images/1.jpg"; .............................. play(); function setrevealtrans() { document.images.yourpicHtmlcontrolid.filters.re…

try catch finally执行顺序,都做了什么?

public static void main(String[] args) {int a a();System.out.println("最终值" a); }private static int a() {int i 10;try {System.out.println("我是try块&#xff1a;" i);//ii/0;return --i;} catch (Exception e) {--i;System.out.println(&…

CHSNS#1.x安装

首先确认你已经安装Sql Server 2005、IIS或相关替代软件&#xff0c;及.net Framework 2.0sp1或以上下载http://www.codeplex.com/sns/上的最新发布包。解压到如C:/Chsword。&#xff08;工程关系在上篇文章中有解释CHSNS#1.x 源代码包说明 &#xff09;启动Sql Server 2005管理…

tomcat部署java项目war包

大家好&#xff0c;我是“Teddy”我又来来了。今天给大家带来的分享是tomcat如何部署简单的java项目。本次我们所用到的环境&#xff1a; jdk1.8tomcat8springboot小项目 一、安装tomcat tomcat安装包下载&#xff1a; 直接点击这里即可下载&#xff1a; teddy百度网盘tomcat8 …