Örnekle C# Enum(Numaralandırma)

⚡ Akıllı Özet

C#'da numaralandırmalar, haftanın günleri gibi sabit tamsayı değerlerinden oluşan adlandırılmış bir küme tanımlayarak kodun okunmasını ve bakımını kolaylaştırır. `enum` anahtar kelimesi, bu sabit değerleri bir kez tanımlayarak program genelinde yeniden kullanılmasını sağlar.

  • 📐 Tanım: `enum` anahtar kelimesi, ilgili adlandırılmış sabitleri tek bir tür altında gruplandırarak, dağınık sihirli sayıları okunabilir tanımlayıcılarla değiştirir.
  • ️ Günlere örnek: Days adlı bir numaralandırma haftanın günlerini saklar ve Days.Sun seçilen üyeyi adıyla döndürür.
  • 🔢 Temel değerler: Enum üyeleri, özel sayılar atanmadığı sürece sıfırdan başlayıp birer birer artan tamsayı değerlerine karşılık gelir.
  • 🔁 Dönüşümler: Açık tür dönüştürmeleri bir enum'u tamsayı değerine dönüştürürken, Enum.Parse ve Enum.TryParse metni tekrar üyelere dönüştürür.
  • 🚩 Bayraklar: Flags özniteliği, bir enum'un birden fazla seçeneği bit alanları olarak bit düzeyinde VEYA operatörünü kullanarak birleştirmesine olanak tanır.
  • 🤖 Yapay zeka yardımı: GitHub Copilot ve ML.NET, enum tanımları oluşturmaya ve enum'ları makine öğrenimi özelliklerine eşlemeye yardımcı olur.

C# Enum (Numaralandırma)

C# Numaralandırma

Sabit bir değer kümesini tanımlamak için herhangi bir programlama dilinde bir numaralandırma kullanılır. Örneğin haftanın günleri bir numaralandırma olarak tanımlanabilir ve programın herhangi bir yerinde kullanılabilir. C#'ta numaralandırma 'enum' anahtar sözcüğünün yardımıyla tanımlanır.

'enum' anahtar kelimesini nasıl kullanabileceğimize dair bir örnek görelim.

Örneğimizde haftanın günlerini depolamak için kullanılacak günler adı verilen bir numaralandırma tanımlayacağız. Her örnek için Program.cs dosyamızdaki yalnızca ana işlevi değiştireceğiz.

C# Numaralandırma

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Açıklama:-

  1. 'Sıralama' veri tipi Bir numaralandırma bildirmek için belirtildi. Numaralandırmanın adı Günlerdir. Haftanın tüm günleri numaralandırmanın değerleri olarak belirtilir.
  2. Son olarak, numaralandırmanın değerlerinden birini görüntülemek için console.write işlevi kullanılır.

Yukarıdaki kod doğru bir şekilde girilir ve program başarıyla çalıştırılırsa aşağıdaki çıktı gösterilecektir.

Çıktı:

C# Numaralandırma

Çıktıdan, numaralandırmanın 'Sun' değerinin konsolda görüntülendiğini görebilirsiniz.

C#'da Enum'lar Neden Kullanılır?

Enum'lar bir programın okunmasını kolaylaştırır, güvenliğini artırır ve bakımını basitleştirir. Kodun her yerine açıklanmamış sayılar (bazen sihirli sayılar olarak da adlandırılır) serpiştirmek yerine, bir enum, her değere amacını belirten açıklayıcı bir ad verir.

  • okunabilirlik: Days.Fri gibi bir isim, 5 rakamından çok daha açık ve anlaşılır; bu nedenle kodu okuyan herkes anlamını hemen kavrar.
  • Tip güvenliği: Enum türünde tanımlanan bir değişken yalnızca tanımlanmış üyelerden birini tutabilir; bu da geçersiz değerlerin ortaya çıkmasını engeller.ping Lütfen
  • Sürdürülebilirlik: Birbiriyle ilişkili sabitler tek bir yerde bulunur, bu nedenle bir değer eklemek veya yeniden adlandırmak tüm programı tutarlı bir şekilde günceller.
  • Bağlanma verileri: WPF ve ASP.NET gibi çerçeveler, bir enum'u açılır listeye bağlayabilir; bu da enum'ları kullanıcı arayüzleri oluşturmak için kullanışlı hale getirir.

Derleyici her atamayı izin verilen üyelere göre kontrol ettiğinden, enum'lar program çalışmadan önce hataları erken yakalamaya da yardımcı olur.

C# Enum'a Özel Değerler Atama

Varsayılan olarak, C# ilk enum üyesine 0 değerini atar ve sonraki her üyeyi bir artırır. Yukarıdaki Days enum'unda Sun 0'a, Mon 1'e ve Sat 6'ya eşittir. Bu varsayılan değerleri, açık sayılar atayarak geçersiz kılabilirsiniz.

  • Açık değerler: `Level {Low = 1, Medium = 5, High = 10}` şeklinde bir `enum` yazmak, her bir üyenin varsayılan sayı dizisi yerine seçilen bir sayıya ayarlanmasını sağlar.
  • Kısmi atama: Yalnızca bazı üyelere değer atarsanız, derleyici sonraki üyeler için en son atanan değerden başlayarak numaralandırmaya devam eder.
  • Altta yatan tür: Bir enum, varsayılan olarak üyelerini int olarak saklar, ancak bellekten tasarruf etmek veya aralığı genişletmek için byte, short veya long tabanlı da kullanabilirsiniz.

Özel değerler, sayıların veritabanı kodları veya protokol sabitleri gibi harici bir sistemle eşleşmesi gerektiğinde faydalıdır; böylece enum, gerçek verileri tam olarak yansıtır.

C# Enum'larını int, string ve Flag'lere Nasıl Dönüştürürsünüz?

C#, sıklıkla bir enum değerini başka bir forma dönüştürmeye ihtiyaç duyar; örneğin, onu sayı olarak saklamak veya metinden geri okumak gibi. Bu dönüşümler birkaç standart yöntemle gerçekleşir.

  • Enum'dan int'e: (int)Days.Wed gibi açık bir tür dönüştürme, depolama veya aritmetik işlemler için yararlı olan temel tamsayıyı döndürür.
  • int'ten enum'a: Diğer yöne doğru dönüştürme, örneğin (Günler)3, bir sayıyı eşleşen enum üyesine geri dönüştürür.
  • Dizeyi numaralandırmaya dönüştürme: Enum.Parse ve daha güvenli olan Enum.TryParse, "Cuma" gibi bir adı geçersiz metin hatası vermeden Days.Fri üyesine dönüştürür.
  • Enum'u dizeye dönüştürme: Herhangi bir üye üzerinde ToString yöntemini çağırmak, o üyenin adını döndürür; bu nedenle Days.Sun.ToString() görüntüleme veya kayıt için "Sun" ifadesini üretir.
  • Üye listesi: Enum.GetValues ​​ve Enum.GetNames yöntemleri her değeri veya adı döndürür; bu da menüleri doldururken veya girişi doğrularırken yardımcı olur.

Bir enum'un tek bir seçenek yerine birden fazla seçeneği temsil etmesi gerektiğinde, Flags özniteliğini uygulayın ve her üyeye 1, 2, 4 ve 8 gibi ikinin kuvvetlerini atayın. Ardından üyeleri bit düzeyinde OR operatörüyle birleştirebilir ve HasFlag yöntemiyle belirli bir seçeneği test edebilirsiniz.

Bu dönüştürme teknikleri, bir enum'un okunabilir adlar, saklanan sayılar ve birleştirilmiş bayrak kümeleri arasında sorunsuz bir şekilde geçiş yapmasını sağlar.ping Programın geri kalanı hem tür güvenli hem de takip etmesi kolay.

SSS

Bir enum değişkeni varsayılan olarak 0 değerine sahiptir; bu değer, 0'a eşit olan üyeye eşlenir. Eğer hiçbir üye 0 değilse, değişken yine de 0 değerini tutar; bu nedenle geliştiriciler karışıklığı önlemek için genellikle önce None veya Unknown üyesini tanımlarlar.

`const` tek bir adlandırılmış değeri tanımlarken, `enum` ilgili bir dizi adlandırılmış sabiti tek bir tür altında gruplandırır. `enum`'lar ayrıca tür güvenliği de sağlar, çünkü bir değişken yalnızca numaralandırmanın tanımlanmış üyelerinden birini tutabilir.

Evet. Bir enum, bir ad alanı içinde veya bir sınıf veya yapı içinde iç içe olarak tanımlanabilir; bu da kapsamını o türle sınırlandırır. Ancak C#, bir enum'un bir metot gövdesi içinde tanımlanmasına izin vermez.

Evet. İki veya daha fazla üye aynı temel numarayı paylaşabilir; bu durumda sonraki adlar ilk adın takma adı olur. Karşılaştırmalar bunları eşit olarak ele alır ve bu değeri bir dizeye dönüştürmek, numaralandırmada ilk tanımlanan adı döndürür.

Enum, değer tipi olduğundan verilerini yığın bellekte referans olarak değil, doğrudan depolar. System.Enum'dan miras alır ancak alttaki tamsayı tipi gibi davranır; bu da enum değerlerinin kopyalanmasını ve karşılaştırılmasını hızlandırır.

Evet. ML.NET'te bir enum'u genellikle tamsayı değerine veya tekil kodlamaya dönüştürerek kategorik bir özelliğe veya etikete eşleyebilirsiniz. Kesin tipli enum'lar, makine öğrenimi işlem hattının giriş sütunlarını açık ve tutarlı tutar.

Evet. GitHub Copilot, Visual Studio içinde eksiksiz enum tanımları, özel değerler, Flags öznitelikleri ve Enum.TryParse gibi dönüştürme yardımcıları önerir. VS Code. RevCopilot'ın alan adınıza uymayan değerler veya adlar seçebileceği için her öneriyi dikkatlice inceleyin.

Verilen bir sayı veya adın tanımlı bir üyeyle eşleşmesi durumunda true döndüren Enum.IsDefined yöntemini kullanın. Bunu Enum.TryParse ile birlikte kullanarak, metni bir enum değerine dönüştürmeden önce kullanıcı girişini güvenli bir şekilde doğrulayabilirsiniz.

Bu yazıyı şu şekilde özetleyin: