Aracılığıyla paylaş


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, enum üyelerinin ilişkili sabit değer türü int'dır; bunlar sıfırla başlar ve tanım metni sırasına göre her bir adımda 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 seçeneklerin bir kombinasyonunu temsil etmesini istiyorsanız, her bir seçeneğin bir bit alanı olacak şekilde numaralandırma üyeleri tanımlayın. Başka bir ifadeyle, bu numaralandırma üyelerinin ilişkili değerleri ikinin kuvvetleri 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, System.FlagsAttribute bölümüne bakınSystem.Enum.

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 System.Enum olarak bilinir) kullanabilirsiniz. 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 enum değerini temel alınan türüne dönüştürürseniz, sonuç bir enum üyesinin ilişkili sayısal 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 yöntemini, bir numaralandırma türünün belirli bir ilişkili değere sahip bir enum üyesi içerip içermediğini belirlemek için kullanın.

Herhangi bir numaralandırma türü için, sırasıyla kutulama ve kutudan çıkarma dönüştürmeleri System.Enum türüne ve türünden yapılabilir.

C# dil belirtimi

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

Ayrıca bakınız