[非テクニカルリファレンス]C#列挙タイプ

9445 ワード

(一)まず不慣れなデータ型について述べる:byte


byteキーワードは、表に示すように値を格納する整数型を表します.
を選択します.
範囲
サイズ
.NET Frameworkタイプ
byte
0~255
符号なし8ビット整数
System.Byte
byteタイプの変数を宣言して初期化する例は、次のとおりです.
byte myByte = 255;

以上の宣言では、整数(整数ではない)255はintからbyteに暗黙的に変換される.整数がbyteの範囲を超えている場合、コンパイルエラーが発生します.
byteからshort、ushort、int、uint、long、ulong、float、double、decimalへの事前定義された暗黙的な変換があります.
より大きなストレージサイズの非テキスト数値タイプをbyteに暗黙的に変換することはできません.ただし、ターゲット変数が同じまたはそれ以上のストレージが大きい場合は、次の文を使用することができます.
byte x = 10, y = 20;// byte 



// Error: conversion from int to byte:

// ,  int  。

byte z = x + y;

// OK: explicit conversion:

byte z = (byte)(x + y);



// , :

int x = 10, y = 20;

int m = x + y;

long n = x + y;

(二)列挙タイプ


Enumキーワードは、列挙を宣言するために使用されます.すなわち、列挙数リストと呼ばれる命名定数のセットからなるユニークなタイプです.
各列挙タイプには、char以外の任意の整数タイプであってもよいベースタイプがあります.列挙要素のデフォルトのベースタイプはintです.byteのような別の整数列挙を宣言するには、次の例に示すように、識別子の後にタイプに続いて、コロンを使用します.
enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

使用を許可する列挙タイプはbyte、sbyte、short、ushort、int、uint、longまたはulongです.
Daysタイプの変数には、名前付き定数に限定されないベースタイプの範囲内の任意の値を割り当てることができます.
Daysは変数を定義し、変数に値を割り当てるタイプです.
ベース・タイプは、列挙数ごとに割り当てられたストレージ・サイズを指定します.しかしながら、enumタイプから整数タイプへの変換は、明示的なタイプ変換で完了する必要がある.たとえば、次の文では、強制変換(enumからintに変換)を使用して、intタイプの変数に列挙数Sunを割り当てます.
int x = (int)Days.Sun;

システムをFlagsAttributeが列挙に適用される場合、列挙にビットOR演算を使用して組み合わせられた要素が含まれている場合、この特性はツールによってenumの動作に影響します.Consoleクラスメソッドや式計算機のようなツールを使用すると、これらの変化に気づくことができます.
public class EnumTest 

    {

        enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat};



        static void Main()

        {

            int x = (int)Days.Sun;

            int y = (int)Days.Fri;



            Days day = (Days)100;

            Days dd = (Days)3;



            Console.WriteLine("Sun = {0}", x);// Sun = 0

            Console.WriteLine("Sun = {0}", Days.Sun);//  Sun = Sun

            Console.WriteLine("Fri = {0}", y);//  Fri = 5

            Console.WriteLine("day = {0}", day);// day = 100

            Console.WriteLine("day = {0}", dd);// dd = Wed



            Console.ReadKey();

        }

    }

System.FlagsAttributeは、列挙コードに使用されます.
// Add the attribute Flags or FlagsAttribute.

[Flags]

public enum CarOptions

{

    // The flag for SunRoof is 0001.

    SunRoof = 0x01,

    // The flag for Spoiler is 0010.

    Spoiler = 0x02,

    // The flag for FogLights is 0100.

    FogLights = 0x04,

    // The flag for TintedWindows is 1000.

    TintedWindows = 0x08,

}



class FlagTest

{

    static void Main()

    {

        // The bitwise OR of 0001 and 0100 is 0101.

        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;



        // Because the Flags attribute is specified, Console.WriteLine displays

        // the name of each enum element that corresponds to a flag that has

        // the value 1 in variable options.

        Console.WriteLine(options);

        // The integer value of 0101 is 5.

        Console.WriteLine((int)options);

    }

}

/* Output:

   SunRoof, FogLights

   5

*/
  Flags, :

5

5

列挙タイプを使用してビットフラグを定義し、列挙タイプのインスタンスが列挙数リストで定義された値の任意の組合せを格納できるようにします.(もちろん、いくつかの組み合わせは、プログラムコードに意味がないか、使用できない可能性があります.)
ビットフラグの列挙を作成する方法はSystemを適用することである.FlagsAttributeプロパティは、AND、OR、NOT、XORのビット演算を実行できるように、いくつかの値を適切に定義します.インプレイスフラグの列挙には、ゼロ(フラグが設定されていないことを示す)の値を持つネーミング定数が含まれます.ゼロ値が「フラグが設定されていません」を示さない場合は、フラグにゼロ値を指定しないでください.
[Flags]

enum Days2

{

    None = 0x0,

    Sunday = 0x1,

    Monday = 0x2,

    Tuesday = 0x4,

    Wednesday = 0x8,

    Thursday = 0x10,

    Friday = 0x20,

    Saturday = 0x40

}

class MyClass

{

    Days2 meetingDays = Days2.Tuesday | Days2.Thursday;

}

http://msdn.microsoft.com/zh-cn/library/cc138362.aspx
http://msdn.microsoft.com/zh-cn/library/system.flagsattribute.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1