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

Sabit listesi türü (veya enum türü), temel alınan integral sayısal türünün adlandırılmış sabitler kümesi tarafından tanımlanan bir değer türüdür . Bir sabit listesi türü tanımlamak için anahtar sözcüğünü kullanın enum ve enumadları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ır ile başlar ve tanım metin sırasını izleyerek bir artış artar. Bir numaralandırma türünün temel alınan türü olarak, diğer tüm integral sayısal türlerini açıkça belirtebilirsiniz. Ayrıca, 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 sabit listesi türünün tanımı içinde bir yöntem tanımlayamazsınız. Bir numaralandırma türüne işlevsellik eklemek için bir genişletme yöntemioluşturun.

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

Birbirini dışlayan bir veya seçenek birleşimi kümesinden seçim göstermek için bir numaralandırma türü kullanırsınız. Seçeneklerin bir birleşimini göstermek için, bir numaralandırma türünü bit bayrakları olarak tanımlayın.

Bit bayrakları olarak numaralandırma türleri

Bir sabit listesi türünün bir seçenek birleşimini göstermesini istiyorsanız, bu seçimler için, tek bir seçenek olan bir bit alanı olduğu gibi, numaralandırma üyelerini tanımlayın. Diğer bir deyişle, bu sabit listesi üyelerinin ilişkili değerleri ikinin üsleri olmalıdır. Ardından, sırasıyla bit düzeyinde mantıksal işleçleri kullanabilir veya & seçimler ya da seçeneklerin kesiştirelerini birleştirmek için ' i kullanabilirsiniz. Bir numaralandırma türünün bit alanları bildirdiğini belirtmek için, Flags özniteliğini buna uygulayın. Aşağıdaki örnekte gösterildiği gibi, bir numaralandırma türünün tanımına bazı tipik birleşimler da dahil edebilirsiniz.

[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şvurusu sayfasının ve System.FlagsAttribute bölümüne System.Enum bakın System.FlagsAttribute .

System. Enum türü ve enum kısıtlaması

System.EnumTür, 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 çeşitli yöntemler sağlar. Daha fazla bilgi ve örnek için bkz System.Enum . API başvuru sayfası.

C# 7,3 ' den başlayarak, bir tür parametresinin bir numaralandırma türü olduğunu belirtmek için bir temel sınıf kısıtlamasında ( System.Enumolarak bilinir) kullanabilirsiniz System.Enum . Herhangi bir numaralandırma türü Ayrıca, bir tür parametresinin null yapılamayan bir değer türü olduğunu belirtmek için kullanılan kısıtlamayı da karşılar struct .

Dönüşümler

Herhangi bir numaralandırma türü için, sabit listesi türü ve temel alınan integral türü arasında açık dönüştürmeler vardır. Bir sabit listesi değerini temel alınan türüne çevirebilirsiniz , sonuç bir numaralandırma üyesinin ilişkili integral 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.IsDefinedBir numaralandırma türünün, ilişkili belirli değere sahip bir numaralandırma üyesi içerip içermediğini anlamak için yöntemini kullanın.

Herhangi bir numaralandırma türü için sırasıyla türe ve türüne kutulama ve kutudan çıkarma dönüştürmeleri bulunur.

C# dili belirtimi

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

Ayrıca bkz.