首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2012-01-31 
一个实体类映射,对它其中类型为枚举的属性进行赋值//有一个实体类MemberpublicclassMember{publicMember()

一个实体类映射,对它其中类型为枚举的属性进行赋值
//有一个实体类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;

[解决办法]
写的不错
[解决办法]
枚举能赋值?
[解决办法]
if(PS[ID].PropertyType.IsEnum)

此时,已判断为枚举类型了.赋值再赋int肯定不行吧?你试下,直接赋值枚举值.

比如:

EduLevelType.woman
[解决办法]
给枚举赋值是不提倡用的。
[解决办法]
枚举赋值是不提倡用的。

[解决办法]
没办法,公司一定要用枚举,用那三层架构写的代码太多了,效率太低,自己就想写几个通用的方法

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);
}

完全可以由代码生成工具生成。
[解决办法]
不支持用反射...
[解决办法]
大致是:

if(PS[ID].PropertyType.IsEnum)
{
PS[ID].SetValue(obj, System.Enum.GetValues(PS[ID].PropertyType)[intID], null);
}

不过我似乎没有看懂你定义这个方法接口
Source(Object obj,int intID)
的逻辑。奇怪,或者在设计上是错误的。
[解决办法]
枚举赋值都没用过,不过你的实体有点太简单了,最好加上Attribute,表明那些是映射数据库的,哪些是附加的业务上的辅助字段

但是反射用得太多了,性能会有很大的副作用,比如循环中的N个实体,在WEB中多用户并发,这种消耗是很大的!

热点排行