算法,位运算,高手请进
用一个枚举来表示对象的多个属性,并保存到一个字段中。 
                                           AttrMulti   =   0x00000001,   
                                           AttrRequired   =   0x00000002,   
                                           AttrKeep   =   0x00000004,   
                                     AttrEditable   =   0x00000008,   
                                     AttrSort   =   0x00000010,   
 比如:如果字段的值是6   =   2+4,则AttrRequired   ,AttrKeep   被选中。 
 如何写一个算法根据字段的值,得到哪个属性被选? 
 在考虑用位运算
------解决方案--------------------if ((Value & AttrMulti) == AttrMulti) ....
------解决方案--------------------if ((Value &(int)枚举变量)> 0) 
 { 
   ....ok 
 }
------解决方案--------------------AttrRequired = 0x00000002,   
               AttrKeep = 0x00000004,   
 如果 int a = 6; 
 00000110 
 比如 a1 - a8 为 复选框!!! 
 bool a1;bool a2;bool a3;bool a4;bool a5;bool a6;bool a7;bool a8; 
 a8 = (a & 0x01) == 1 
 a7 = (a > >  1 & 0x01) == 1 ; 
 a6 = (a > >  2 & 0x01) == 1 ; 
 a5 = (a > >  3 & 0x01) == 1 
 a4 = (a > >  4 & 0x01) == 1 ; 
 a3 = (a > >  5 & 0x01) == 1 ;     
 this.chkk1.Checked = (var > > 15 & 0x01) != 0; 
 			this.chkk2.Checked = (var > > 14 & 0x01) != 0; 
 			this.chkk3.Checked = (var > > 13 & 0x01) != 0; 
 			this.chkk4.Checked = (var > > 12 & 0x01) != 0; 
 			this.chkk5.Checked = (var > > 11 & 0x01) != 0; 
 			this.chkk6.Checked = (var > > 10 & 0x01) != 0; 
 			this.chkk7.Checked = (var > > 9 & 0x01) != 0; 
 			this.chkk8.Checked = (var > > 8 & 0x01) != 0; 
 			this.chkk9.Checked = (var > > 7 & 0x01) != 0; 
 			this.chkk10.Checked = (var > > 6 & 0x01) != 0; 
 			this.chkk11.Checked = (var > > 5 & 0x01) != 0; 
 			this.chkk12.Checked = (var > > 4 & 0x01) != 0; 
 			this.chkk13.Checked = (var > > 3 & 0x01) != 0; 
 			this.chkk14.Checked = (var > > 2 & 0x01) != 0; 
 			this.chkk15.Checked = (var > > 1 & 0x01) != 0;     
 反算也可以哦   
 Utility.Feedback.NotifyHex = (byte)(this.chk1.Checked? 128:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk2.Checked? 64:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk3.Checked? 32:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk4.Checked? 16:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk5.Checked? 8:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk6.Checked? 4:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk7.Checked? 2:0); 
 				Utility.Feedback.NotifyHex += (byte)(this.chk8.Checked? 1:0);     
------解决方案--------------------楼主你的问题首先应该是可以将枚举作为位域(即一组标志)处理。 
 首先定义的枚举要满足下面两个条件: 
 1.要想实现可以将枚举作为位域(即一组标志)处理,枚举值必须保证组合的枚举常量中的各个标志都不重叠,我推荐你用 2 的幂(即 1、2、4、8 等)定义枚举常量。 
 2.定义的枚举需要用FlagsAttribute来修饰。   
 然后我们再来看你的问题。 
 下面这个函数会返回一个字符串,这个字符串中用“,”分割了选中各枚举的名字。调用的时候参数必须是合法的值否则会返回参数.ToString()。 
 private string GetValueName(int para) 
 { 
   return Enum.Format(typeof(Attr), para,  "G ");//假设 "Attr "是你定义的枚举