有这样的一个枚举定义:
[Flags]public enum CarOptions
{
SunRoof = 0x01,
Spoiler = 0x02,
FogLights = 0x04,
TintedWindows = 0x08,
}public static void Main()
{
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
Console.WriteLine(options);
Console.WriteLine((int)options);
}
当 CarOptions options = CarOptions.SunRoof | CarOptions.FogLights; 的时候,我可以通过什么方法取得 options 包含了哪些值呢,意思就是 options 返回 CarOptions.SunRoof 和 CarOptions.FogLights 这两个值。

解决方案 »

  1.   

    if ((options & CarOptions.SunRoof) == CarOptions.SunRoof) 包含 CarOptions.SunRoof
      

  2.   

    options.ToString()
    就可以得到"SunRoof,FogLights"
      

  3.   

    如果我的枚举元素很多,我需要返回一个数组,包含options中所包含的每一项值最好的办法是什么,难道真的要一个个的判断???难道要像下面这样写?????有什么更好的方法没有???public ArrayList GetItem( options )
    {
        ArrayList al = new ArrayList();
        
        if ((options & CarOptions.SunRoof) == CarOptions.SunRoof)
            al.add( CarOptions.SunRoof );    if ((options & CarOptions.Spoiler) == CarOptions.Spoiler)
            al.add( CarOptions.Spoiler);    if ((options & CarOptions.FogLights) == CarOptions.FogLights)
            al.add( CarOptions.FogLights);    if ((options & CarOptions.TintedWindows) == CarOptions.TintedWindows)
            al.add( CarOptions.TintedWindows);    return al;
    }
      

  4.   

    to:huangkc(软贱&henchman)我不是要返回字符串哦!!!!!!
      

  5.   

    ArrayList al = new ArrayList();foreach(int i in Enum.GetValues(typeof(CarOptions))) 
    {
     if ((options & (CarOptions)i) == (CarOptions)i)
            al.add( (CarOptions)i);
    }
    //代码没测试过
    //MSDN能解决很多问题的 :D
      

  6.   

    ArrayList al = new ArrayList();foreach(CarOptions i in Enum.GetValues(typeof(CarOptions))) 
    {
     if ((options & i) == i)
            al.add(i);
    }
      

  7.   

    CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
    string[] optionStr = options.ToString().Split(',');
    CarOptions[] co = new CarOptions[optionStr.Length];for(int i = 0;i < optionStr.Length;i++)
    {
    co[i] = (CarOptions)Enum.Parse(typeof(CarOptions),optionStr[i]);
    }