Applied .NET framework 第13章讲这个 非常得清楚 楼主用电脑下一个瞧瞧
可以通过改变{0}来改变显示 {0:F}和{0:H}试试这两个

解决方案 »

  1.   

    using System;
    [Flags]
    public enum Seasons
    {
        Summer = 1,
        Autumn = 2,
        Winter = 4,
        Spring = 8,
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("{0}",(Seasons)12);
            Console.ReadKey();
        }
    }当你用Console.WriteLine输出的时候,实际上是调用了ToString()方法,编译器会试图将12所表示的数值翻译为枚举类型中对应的符号,现在枚举实例对应的数值是12,因此它没有对应的符号,但是ToString()方法会检测到Seasons类型上有应用[Flags]特性,它会据此把枚举数值看做是一组位标记,而非一个单独的数值,由于12是由4和8组合而成,Seasons又定义了4,8所对应的枚举值,所以ToString()方法将产生下面的字符串Winter,Spring
      

  2.   

    谢谢两位大侠帮助,我在网上查到一条关于flags的解释:
     Flags   属性表示一种特殊的枚举,称为位域。运行库本身不区分传统枚举与位域,但您的语言可能会区分二者。当区分二者的时候,可以对位域(而不是枚举)使用位操作符以产生未命名的值。枚举一般用于列出唯一的元素,如一周的各天、国家或地区名称,等等。位域一般用于列出可能联合发生的质量或数量,比如   Red   And   Big   And   Fast。   可否如下理解:
    当Console.WriteLine("{0}",(Seasons)8);时 ,枚举属于上解释中的“运行库本身不区分传统枚举与位域”,此处属于枚举正常运行,并没有处理到Flags的特性。
    当Console.WriteLine("{0}",(Seasons)12);时,枚举无法解释这种情况,转而调用Flags位域功能,而上述解释中的"使用位操作符以产生未命名的值" 其中的未命名值是否可以理解为就是这里12,而“使用位操作符以产生”是否是一个循环的过程,那么循环的工作是如何进行?
    以 public enum Seasons
    {
        Summer = 1,
        Autumn = 2,
        Winter = 4,
        Spring = 8,
    }为例,此搜索过程是否依照常理,对枚举的4个成员进行逐一组合对比?