Numaralandırma türleri (C# başvurusu)

Numaralandırma türü (veya numaralandırma türü), temel alınan tam sayı sayısal türünün adlandırılmış sabitleri kümesi tarafından tanımlanan bir değer türüdür. Bir numaralandırma türü tanımlamak için anahtar sözcüğünü enum kullanın ve sabit listesi üyelerinin adlarını belirtin:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Varsayılan olarak, sabit listesi üyelerinin ilişkili sabit değerleri türündedir int; sıfırla başlar ve tanım metin sırasını izleyerek bir artar. Numaralandırma türünün temel alınan türü olarak diğer tüm integral sayısal türleri açıkça belirtebilirsiniz. Aşağıdaki örnekte gösterildiği gibi ilişkili sabit değerleri açıkça belirtebilirsiniz:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Bir numaralandırma türünün tanımı içinde bir yöntem tanımlayamazsınız. Numaralandırma türüne işlevsellik eklemek için bir uzantı yöntemi oluşturun.

Sabit listesi türünün E varsayılan değeri, sıfırın karşılık gelen sabit listesi üyesi olmasa bile ifadesi (E)0tarafından üretilen değerdir.

Numaralandırma türünü, birbirini dışlayan bir değer kümesinden veya seçim birleşiminden bir seçimi temsil etmek için kullanırsınız. Bir seçim bileşimini temsil etmek için bir numaralandırma türünü bit bayrakları olarak tanımlayın.

Numaralandırma türleri bit bayrakları olarak

Numaralandırma türünün bir seçim birleşimini temsil etmelerini istiyorsanız, bu seçenekler için tek bir seçimin bit alanı olması için numaralandırma üyeleri tanımlayın. Başka bir ifadeyle, bu sabit listesi üyelerinin ilişkili değerleri ikinin gücü olmalıdır. Ardından bit düzeyinde mantıksal işleçleri | kullanabilir veya & sırasıyla seçimleri birleştirebilir veya seçim birleşimlerini kesiştirebilirsiniz. Numaralandırma türünün bit alanları bildirdiğini belirtmek için, buna Flags özniteliğini uygulayın. Aşağıdaki örnekte gösterildiği gibi, numaralandırma türünün tanımına bazı tipik birleşimler de ekleyebilirsiniz.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Daha fazla bilgi ve örnek için API başvuru sayfasına, Özel olmayan üyelere ve API başvuru sayfasının Flags özniteliği bölümüne System.Enum bakınSystem.FlagsAttribute.

System.Enum türü ve numaralandırma kısıtlaması

türü System.Enum , tüm numaralandırma türlerinin soyut temel sınıfıdır. Bir numaralandırma türü ve değerleri hakkında bilgi almak için bir dizi yöntem sağlar. Daha fazla bilgi ve örnek için API başvuru sayfasına bakın System.Enum .

Tür parametresinin bir numaralandırma türü olduğunu belirtmek için temel sınıf kısıtlamasında (numaralandırma kısıtlaması olarak bilinir) kullanabilirsinizSystem.Enum. Herhangi bir numaralandırma türü, tür parametresinin struct null atanamaz bir değer türü olduğunu belirtmek için kullanılan kısıtlamayı da karşılar.

Dönüşümler

Herhangi bir numaralandırma türü için, numaralandırma türü ile temel alınan tam sayı türü arasında açık dönüştürmeler vardır. Bir sabit listesi değerini temel alınan türüne dönüştürürseniz, sonuç bir sabit listesi üyesinin ilişkili tam sayı değeridir.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Enum.IsDefined Bir numaralandırma türünün belirli ilişkili değere sahip bir sabit listesi üyesi içerip içermediğini belirlemek için yöntemini kullanın.

Herhangi bir numaralandırma türü için, sırasıyla türüne ve türünden System.Enum gelen kutulama ve kutulama kaldırma dönüştürmeleri vardır.

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

Ayrıca bkz.