【高分】关于C#中的动态创建枚举类型

龙宜坡 2009-08-14 10:31:49
最近有个项目比较棘手!
需求:

从数据库中某张表中动态创建一个枚举类型.


例如:

数据库中存在表Employee,其内容如下:
姓名 编号
Name No.

张三 1234

李四 4562

王五 2334


现在我使用中需要动态创建一个枚举类型以供使用,要创建的枚举如下:

enum enumEmployee
{
张三 = 1234,
李四 = 4562,
王五 = 2334
}

不知如何实现

看了MSDN中使用EnumBuilder类实现,结果还是不会,请过来人指教,谢谢!

MSDN的参考:http://msdn.microsoft.com/zh-cn/library/system.reflection.emit.enumbuilder(VS.80).aspx

说明:外地出差中,不能及时回复,忘谅解!
...全文
4929 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-10-29
  • 打赏
  • 举报
回复

我也一搜索动态创建enum,结果跑这来了。

我的一个想法是提供给我们自己前台编写代码时。
输入一个任意类型后。
我直接对象
object.GetType().GetProperties().就能显示有哪些属性名.
类似IDE中.输入类型.结果就把所有属性名弹出来了.
coyotey 2010-04-17
  • 打赏
  • 举报
回复
为什么我登录了还是有些看不到啊w
jin20000 2009-12-03
  • 打赏
  • 举报
回复
枚举就是要值固定的,值要动态的话,完全没必要用枚举,这算设计的问题
hunzib 2009-12-03
  • 打赏
  • 举报
回复
我也在找动态枚举的方法 一百度就来到这里了
jivi 2009-08-18
  • 打赏
  • 举报
回复
动态创建枚举。好象就失去了枚举的好处了吧。那创建还有什么意义
龙宜坡 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 li45214521 的回复:]
你觉的名字会没有重复的吗
[/Quote]

按照设计的初衷来讲,是不会有重复的!
龙宜坡 2009-08-17
  • 打赏
  • 举报
回复
@pcnetman888
谢谢!


这个问题我基本也考虑的差不多了,待最终解决方法出来了就结贴!
li45214521 2009-08-16
  • 打赏
  • 举报
回复
你觉的名字会没有重复的吗
微创社(MCC) 2009-08-16
  • 打赏
  • 举报
回复
[1]反射开销很大,几百倍于正常的情况
[2]动态编译开销并不大,几倍于正常情况
[3]动态编译的生成静态场景也不错,至少优行Dictionary方案

[4]动态编译的生成动态场景,在内存中进行处理,如果是处理的是类型中的方法还有点价值,处理枚举有点得不偿失.
龙宜坡 2009-08-16
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 ws_hgo 的回复:]
是啊
为什么一定要用枚举了
[/Quote]

谢谢,暂时先不讨论用不用,只说说如果用的话要怎么样使用!


:)
ws_hgo 2009-08-15
  • 打赏
  • 举报
回复
是啊
为什么一定要用枚举了
wuyq11 2009-08-15
  • 打赏
  • 举报
回复
用类实例存放数据就是通过List<Employee> 获取数据一样使用
用枚举效果不一定好
xiaojia19850414 2009-08-15
  • 打赏
  • 举报
回复
mark
龙宜坡 2009-08-15
  • 打赏
  • 举报
回复
不过这种所谓动态生成代码的方法是值得研究的,以供不时之需!
龙宜坡 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 hzzasdf 的回复:]
MSDN上是用reflection emit的方法做,等于是从头自己造个assembly,就是属于动态编译的方法。
也可以用codedom做,稍微简单些,可以把assembly建在内存里。说穿了就是用程序动态生成一段代码,然后编译成assembly,再用反射读出来。
不过我觉得楼主可以换个思路,动态编译和反射开销太大,可以改用其他的数据结构来实现。
[/Quote]

是的,做的太复杂或资源开销过大的话将得不偿失!


谢谢!
  • 打赏
  • 举报
回复
MSDN上是用reflection emit的方法做,等于是从头自己造个assembly,就是属于动态编译的方法。
也可以用codedom做,稍微简单些,可以把assembly建在内存里。说穿了就是用程序动态生成一段代码,然后编译成assembly,再用反射读出来。
不过我觉得楼主可以换个思路,动态编译和反射开销太大,可以改用其他的数据结构来实现。
十八道胡同 2009-08-15
  • 打赏
  • 举报
回复
呵呵,
龙宜坡 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lcl_data 的回复:]
引用 17 楼 goga21cn 的回复:
也许是我一时心血来潮才想做成枚举的!

其实用Dictionary来解决比用动态枚举的解决方法要好
[/Quote]


这不,来CSDN和大伙讨论讨论!
十八道胡同 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 goga21cn 的回复:]
也许是我一时心血来潮才想做成枚举的!
[/Quote]
其实用Dictionary来解决比用动态枚举的解决方法要好
龙宜坡 2009-08-15
  • 打赏
  • 举报
回复
也许是我一时心血来潮才想做成枚举的!
加载更多回复(16)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧