技术开发 频道

C# 枚举在项目中的应用总结

    【IT168 技术文档】本文主要是我在实际项目中对C#枚举的应用总结。

  一、枚举基本运用

  1、枚举其实可以理解为一个恒量的结合,又或者可以认为它是一种类型。比如以下枚举定义:

public enum MicrosoftTechnology    
{        
     CSharp,        
     ASPNETMVC,        
     SQLServer,      
     WCF,        
     SilverLight,  
}

 

  此枚举默认值为int型,当然我们可以根据需要指定枚举的数据类型。比如 public enum MicrosoftTechnology: long{....} 等。MicrosoftTechnology枚举int值分别为 Csharp:0;ASPNETMVC:1;SQLServer:2;WCF:3;SilverLight:4, 以自增1的形式自动赋值。当然也可以指定每个枚举项的值。

  2、枚举的位运算:

  Flag特性表示枚举支持位运算。一般情况下我们用到的位运算符有:&(与)、|(或)、~(非)。

  首先我们为枚举加上[Flags]特性后再指定枚举值。

  将1、中的代码修改如下:

[Flags]  
public enum MicrosoftTechnology    
{        
         CSharp
= 1,        
         ASPNETMVC
= 2,        
         SQLServer
= 4,      
         WCF
= 8,        
         SilverLight
= 16,  
}

 

  这里指定枚举值主要是为了使用与、或、非这三个位运算符。将枚举值转化成二进制值:

  CSharp: 1 = 0001

  ASPNETMVC: 2 = 0010

  SQLServer: 4 = 0100

  WCF: 8 = 1000

  SilverLight: 16 = 10000

  举例说明:

  如果某位开发者选择两项微软技术分别为CSharp和ASPNETMVC 用位运算表达为 0001 | 0010 = 0011。经过不懈的努力这位开发者掌握了以上两项技术“0011”。现在我们想通过位运算检测出这位开发者是否精通CSharp:代码为:

  (MicrosoftTechnology.CSharp|MicrosoftTechnology.ASPNETMVC) & MicrosoftTechnology.CSharp 等同 (0001 | 0010 = 0011)& 0001 等于 0001(CSharp :1) 讲到这里我想您应该不难理解:为了对枚举运用位操作时指定枚举值的缘故了。非(~)操作符这里就留给读者自己实践了。
 

         二、为枚举进行本地化

  通过.net泛型机制编写枚举本地化通用方法,代码如下:

         /// <summary>
        
/// 本地化枚举通用方法
        
/// </summary>
        
/// <returns></returns>
        
/// <author>Ryanding</author>
          
private static string LocalizeEnumeration(object enumerator)
         {
  
             ResourceManager resources
= new ResourceManager("resx文件名",
                         System.Reflection.Assembly.GetExecutingAssembly());

            
string name = String.Format("{0}.{1}.Text", enumerator.GetType().Name, enumerator);
            
string localizedDescription = resources.GetString(name);

            
if (localizedDescription == null)
                 return enumerator.ToString();
            
else
                 return localizedDescription;
         }

        
/// <summary>
        
/// 翻译枚举成中文
        
/// </summary>
          
public static List<KeyValuePair> GetEnumStringList<T>()
         {
            
string[] resultPrepare = Enum.GetNames(typeof(T));

             List
<KeyValuePair> result = new List<KeyValuePair>();
            
Array.ForEach(resultPrepare, f => result.Add(new KeyValuePair
             {
                 Key
= (int)(Enum.Parse(typeof(T), f)),
                 Value
= LocalizeEnumeration(Enum.Parse(typeof(T), f))
             }
             ));

             return result;
         }

 

  通过以上代码,可以认为枚举也是一种类型。这里通过泛型机制将枚举本地化统一处理。  

0
相关文章