一个实体类映射,对它其中类型为枚举的属性进行赋值

venric 2007-07-18 09:26:30
//有一个实体类Member
public class Member
{
public Member() { }
private string _id;
private string _name;
private SexType _sex;
public string ID()
{
get{ return _id; } set { _id=value; }
}
public string Name()
{
get{ return _name; } set { name=value; }
}
public SexType Sex()
{
get{ return _sex; } set { _sex=value; }
}
}
//有一个枚举
public enum EduLevelType
{
man = 0,
woman = 1
}
//对枚举赋值的一个通用方法(其实还有很多操作,这里简化了)
public void Source(Object obj,int intID)
{
Type t = obj.GetType();
System.Reflection.PropertyInfo[] PS = t.GetProperties();
int ID;
for (ID = 0; ID < PS.Length; ID++)
{
//当属性是枚举类型时
if(PS[ID].PropertyType.IsEnum)
{
//对枚举类型的属性Sex进行赋值,怎样实现呢

//如果直接这样做,是不行的:PS[ID].SetValue(obj, intID, null);
}

}

方法引用:Member mem = new Member();
Source(mem ,1);

结果应该是:mem.Sex = woman;
...全文
1637 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
ying84 2009-12-10
  • 打赏
  • 举报
回复
刚查到这个问题,做个记号
wdfghjuj76 2008-09-05
  • 打赏
  • 举报
回复
记号
venric 2007-07-20
  • 打赏
  • 举报
回复
PS[ID].SetValue(obj,System.Enum.Parse(PS[ID].PropertyType,intID.ToString()),null) 这样就可以了。那根据枚举的值怎样获取对应的整型值呢,如现在知道了mem.Sex = woman;如何得到值1呢
venric 2007-07-20
  • 打赏
  • 举报
回复
在即时窗口敲了大半天,终于给我试到了,Convert.ToInt32(System.Enum.Parse(PS[ID].PropertyType, "woman")) 这样就可以得到1了,可能很少人会用我这种笨方法吧,所以不知我问的是什么。。。没办法了。。。以我的水平暂时只能写到这个地步了。
venric 2007-07-20
  • 打赏
  • 举报
回复
回复:WNASP(这年头什么都“和谐”)
----但是反射用得太多了,性能会有很大的副作用,比如循环中的N个实体,在WEB中多用户并发,这种消耗是很大的!
我也不知道应该怎样写方法了,大家都说反射不好,但对于实体来说,我想不出怎样的办法了。难道三层架构真的要写这么多代码吗?虽然有代码生成工具,但是如果改一些字段的话,改起来很嘛烦的。

----枚举赋值都没用过,不过你的实体有点太简单了,最好加上Attribute,表明那些是映射数据库的,哪些是附加的业务上的辅助字段
可以写一个属性我看一下吗。。。这样做的好处是什么呢
godgreat 2007-07-20
  • 打赏
  • 举报
回复
答案就在上面,接分就在下面
WNASP 2007-07-20
  • 打赏
  • 举报
回复
枚举赋值都没用过,不过你的实体有点太简单了,最好加上Attribute,表明那些是映射数据库的,哪些是附加的业务上的辅助字段

但是反射用得太多了,性能会有很大的副作用,比如循环中的N个实体,在WEB中多用户并发,这种消耗是很大的!
venric 2007-07-20
  • 打赏
  • 举报
回复
唉呀,我忘了问这个问题了。。。Jinglecat(晓风残月 >> 问题需简洁,错误要详细)、sp1234(与其赌博赚钱,不如自己开赌场)还在吗。。。。
venric 2007-07-19
  • 打赏
  • 举报
回复
--- 通过反射,只是赋一个枚举的值,太浪费了,

不是的,通过反射,我是想把form表单的值都写进实体的,只是对于枚举的赋值我不懂,那个source方法就只是那样写而已
venric 2007-07-18
  • 打赏
  • 举报
回复
难道这个问题真的解决不了吗。
venric 2007-07-18
  • 打赏
  • 举报
回复
回复:Jinglecat(晓风残月 >> 问题需简洁,错误要详细)
说得很对,但有时候做些小项目的东西,就不会考虑得那么多了。我现在主要是写了几个方法:把一个实体的值写入数据库、根据一个实体的值的改变修改数据库、删除数据库纪录、把表单控件的值写入实体、把实体的值显示在表单控件上。
至于查询,对每个表我都进行单独的处理,用得最多的应该也就是查询了
Jinglecat 2007-07-18
  • 打赏
  • 举报
回复
枚举赋值是不提倡用的

==========

为什么?

我一直在用啊,满好用的啊

Jinglecat 2007-07-18
  • 打赏
  • 举报
回复
没办法,公司一定要用枚举,用那三层架构写的代码太多了,效率太低,自己就想写几个通用的方法

System.Reflection.PropertyInfo[] PS = t.GetProperties();

=====
1。
丫,反射都出来了

2。
代码多?

你应该考虑使用,代码生成工具,

3。
而反射通常正是给这些开发工具、IDE使用的,而不是用在实际应用系统中的,虽然你这样省了敲代码的力气,但是代码的是性能的大大降低,

4。
想想,这个反射得由多少方法来调用啊,再加上每个方法中 while(xxxDataReader.Read()) ...一循环,服务器负载可想而知,
也许你会告诉我,不用考虑,硬件资源...

5。
像这样的代码

IList<Member> members;
// ...
Member member;
while(xxxDataReader.Read()) {
member = new Member();
member = (SexType)xxxDataReader.GetInt32(SexTypeColumnIndex);
// ...
members.Add(member);
}

完全可以由代码生成工具生成。
venric 2007-07-18
  • 打赏
  • 举报
回复
回复:wdzr_826(舞指如歌(俺也是学点奈特的))
没办法,公司一定要用枚举,用那三层架构写的代码太多了,效率太低,自己就想写几个通用的方法。
Ilovesport 2007-07-18
  • 打赏
  • 举报
回复
枚举赋值是不提倡用的。
wdzr_826 2007-07-18
  • 打赏
  • 举报
回复
给枚举赋值是不提倡用的。
venric 2007-07-18
  • 打赏
  • 举报
回复
回复:sxlfybb(房客)

如果是直接赋EduLevelType.woman的话,那这个方法就不能通用了
jjhlover 2007-07-18
  • 打赏
  • 举报
回复
学习,JF
jjhlover 2007-07-18
  • 打赏
  • 举报
回复
学习,JF
jjhlover 2007-07-18
  • 打赏
  • 举报
回复
学习,JF
加载更多回复(10)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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