ProgramlamaUygulama Geliştirici (VB.NET)

Visual Basic'de Enum değerlerinin işlenmesi ve döngüye alınması nasıl gerçekleştirilir ve Enum değişkenine geçersiz değerler atarken hatalardan nasıl kaçınılır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Soru Geçmişi

Visual Basic'deki (Enum) listesindeki Enum'lar, kodun okunabilirliğini ve güvenilirliğini artırmak için kullanılır. Enum, programın mantığı için geçerli değerlerin katı bir kümesini oluşturarak tanımlı bir dizi isimlendirilmiş sabit belirlemek için olanak tanır.

Problem

Birçok kişi Enum'un bir değişkenin değerini yalnızca listedeki bir öğeye kısıtladığını düşünmektedir. Ancak gerçekte, Enum değişkeni bir tam sayı türü değer saklar ve temel tür için uygun herhangi bir değeri atamak mümkündür; bu durum hatalara ve beklenmeyen davranışa yol açabilir.

Çözüm

VB.NET'te, bir Enum değişkenine listede tanımlanmayan bir değeri atama yasağı yoktur. Değerlerin güvenli bir şekilde döngüye alınması için System.Enum.GetValues fonksiyonu kullanılır. Değerlerin geçerliliği ek kontrollerle sağlanır.

Kod örneği:

Enum Renkler Kırmızı = 1 Yeşil = 2 Mavi = 3 End Enum Dim c As Renkler = CType(4, Renkler) ' Bu bir derleme hatası olmayacak! For Each value As Renkler In [Enum].GetValues(GetType(Renkler)) Console.WriteLine(value) Next ' Kontrol If [Enum].IsDefined(GetType(Renkler), c) Then Console.WriteLine("Tamam") Else Console.WriteLine("Geçersiz değer!") End If

Ana Özellikler:

  • Enum, esasen isimlendirilmiş tam sayı sabitleridir
  • İstenirse bir Enum değişkenine temel türden herhangi bir değer atanabilir
  • Koruma, IsDefined kontrolleri ve mantığına dayanır.

Şaşırtıcı Sorular.

Enum değişkeninin her zaman yalnızca tanımlı değerleri içerdiğini garanti edebilir miyiz?

Hayır. Enum, dil seviyesinde temel sayısal türün üzerine hafif bir sarıcıdır. Belirli değerlerin geçerliliğini kontrol etmek her zaman açıkça IsDefined fonksiyonu ile yapılmalıdır.

Tanımlanmamış bir değere sahip bir Enum'un string temsilini elde etmek mümkün mü?

Evet. Tanımlanmayan bir değere atanmış Enum için ToString metodu, bu sayısal karşılığı string olarak verecektir: örneğin, Renkler = 4 olduğunda sonuç "4" olacaktır.

Enum.GetValues aracılığıyla tüm değerleri listeleyip ardından Enum değişkenine liste dışı bir sayı atarsak ne olur?

GetValues'ın döngüsü yalnızca tanımlı üyeleri dönecek, ancak Enum değişkeni yine de liste dışı herhangi bir sayıyı içerebilir — bu bir mantık hatasına dönüşecektir, sözdizimi hatasından ziyade.

Tipik Hatalar ve Anti-Desenler

  • Enum kullanmadan önce Enum.IsDefined kontrolünün olmaması
  • Sayısal değerlerin Enum'a kör dönüşümü
  • Değerlerin toplamını açıkça işaret etmeden mantıksal (bit düzeyinde) bayrakların kullanımı

Gerçek Hayat Örneği

Negatif Durum

Ekrandan giriş, doğrulama olmaksızın doğrudan Enum'a dönüştürülür; — geçersiz değerler alırız ve uygulama sonraki aşamalarda çöker.

Artılar:

  • Hızlı

Eksiler:

  • İş mantığında hatalar, teşhis zorluğu

Pozitif Durum

Kullanıcı değeri önce Enum.IsDefined ile doğrulanır, işleme geçersiz verilere karşı bile doğrudur.

Artılar:

  • Güvenilirlik, öngörülebilir davranış

Eksiler:

  • Doğrulama için ek bir kod satırı gerektirir