using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
public class EnumRemarkAttribute : Attribute
{
private string _description; public string Description
{
get
{
return _description; }
set { _description = value; }
}
public EnumRemarkAttribute(string description)
{
_description = description;
}
} public enum Color
{
[EnumRemark("金色")]
Gold=,
[EnumRemark("黄色")]
Huang=,
[EnumRemark("白色")]
bai=,
[EnumRemark("黑色")]
hei=
} /// <summary>
/// 集合适配器
/// </summary> public class EnumDataSource<EnumType> : List<EnumDataSource<EnumType>.EnumAdapter>
{
public EnumDataSource()
{
if (!typeof(EnumType).IsEnum)
throw new NotSupportedException("Can not support type: " + typeof(EnumType).FullName);
foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
this.Add(new EnumAdapter(enumType));
}
/// <summary>
/// 包装适配类
/// </summary>
public sealed class EnumAdapter
{
//被包装的东西,原材料
private EnumType _value; public EnumType Value
{
get
{
return this._value;
}
} public int EnumValue
{
get
{
return Convert.ToInt32((object)this._value);
}
} public string EnumName
{
get
{
string _enumName="";
FieldInfo field = typeof(EnumType).GetField(_value.ToString());
var arr = field.GetCustomAttributes(typeof (EnumRemarkAttribute));
foreach (EnumRemarkAttribute item in arr)
{
_enumName = item.Description;
break;
}
return _enumName;
} } public EnumAdapter(EnumType value)
{
if (!Enum.IsDefined(typeof(EnumType), (object)value))
throw new ArgumentException(string.Format("{0} is not defined in {1}", (object)value, (object)typeof(EnumType).Name), "value");
this._value = value;
}
}
} class Program
{
static void Main(string[] args)
{ IList<EnumDataSource<Color>.EnumAdapter> list=new EnumDataSource<Color>();
foreach (EnumDataSource<Color>.EnumAdapter a in list)
{
Console.WriteLine(a.EnumValue+":"+a.EnumName); }
Console.ReadKey();
}
}
}

c# 集合适配器的更多相关文章

  1. android-GridView控件的使用

    GridView 按行列方式显示多个组件(二维布局界面) 数据源(集合)-适配器(SimpleAdapter)-视图界面(GridView),加载适配器-配置监听器(OnItemClickListen ...

  2. AndroidManifest.xml文件

    AndroidManifest.xml常用标签解读 1.全局篇(包名,版本信息) 2.组件篇(四大组件) Activity Service Content Provider Broadcast Rec ...

  3. android蓝牙通讯开发(详细)

    新建一个工程之后,我们可以先看到界面左边的项目栏,我们可以看到,除了app目录以外,大多数的文件和目录都是自动生成的,我们也不需要对他们进行修改,而app目录之下的文件才是我们工作的重点.下面,我先对 ...

  4. C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素

    01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...

  5. Android—万能ListView适配器

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...

  6. Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器

    一.写在前面: 本次我们来讲解一下Android应用中三个适配器:BaseAdapter.SimpleAdapter和ArrayAdapter.其中常见的是BaseAdapter,也是个人推荐使用的适 ...

  7. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  8. Spring映射器、适配器、解析器

    1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2spring ...

  9. Java集合源码分析(一)

    Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭 ...

随机推荐

  1. 原生js 实现购物车价格和总价 统计

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. MapReduce编程job概念原理

    在Hadoop中,每个MapReduce任务都被初始化为一个job,每个job又可分为两个阶段:map阶段和reduce阶段.这两个阶段分别用两个函数来表示.Map函数接收一个<key,valu ...

  3. Notice: Trying to get property of non-object problem(PHP)解决办法 中间件只能跳转不能返任何数据

    这里实际是调用了一个zend的数据库访问的方法,使用了fetchAll方法,但由于数据库中没有该记录,所以返回的对象是null,所以我就判断对象是否为null: 复制代码代码如下: if($obj== ...

  4. java内存溢出分析(二)

    我们继续java内存溢出分析(一)的分析,点击Details>按钮,显示如下图,我们发现有一个对象数量达到280370216个,再点击其中的List objects 点击后,显示下图 至此,我们 ...

  5. POJ 3142 The Balance

    Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of ...

  6. hibernate的延迟加载及其与session关闭的矛盾

    延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载. 那么Hibernate是怎么知道用户在什么时候使用数据了呢?又是如何加载数据呢? 其实很简单,它使用了代理机制.返回给用户的并不 ...

  7. Linux下如何修改ip地址

    在Linux的系统下如何才能修改IP信息 以前总是用ifconfig修改,重启后总是得重做.如果修改配置文件,就不用那么麻烦了- A.修改ip地址 即时生效: # ifconfig eth0 192. ...

  8. java面试笔试

    一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? String在Java中是final的类,所以不可变:StringBuffer是 ...

  9. django1.7取消syncdb后不能创建model相应表的问题

    一.在运行一个django程序时,无法创建自定义model相应的表. 我检查seetings.py文件,发现自定义的app,blog已经写到INSTALLED_APPS中, INSTALLED_APP ...

  10. (http://fonts.googleapis.com/css?)打开很慢解决方案

    把fonts.googleapis.com替换为fonts.useso.com即可