Merhabalar herkese =) ...Uzun süredir fırsat bulup yazamıyordum ve artık yazmam gerektiğine inandım ve birşeyler karaladım =)..
Bu yazımızda programlarımızda işlerimizi kolaylaytıran Enum yapısının güzel olan bir özelliğine değineceğiz ki buda aslında arka planda metinsel olarak değer saklamak olacaktır.Bildiğimiz gibi Enum'lar değer tipli üyelerimizdir yani tanımlamış olduğumuz özellikleri sayısal olarak saklamaktadır.Fakat aşağıdaki örneğimize bakacak olursakda kendi custom bir Attribute yazarak yapmak istediğimiz işlemi gerçekleştirmek için karşımıza çıkacak olan problemi ortadan kaldırmış oluyoruz.. Örneğimizin kodları aşağıda ki gibidir.
[code:c#]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace EnumTest
{
public enum MyEnum
{
[MyStringEnum("Serhat", true)]
Ad,
[MyStringEnum("Taş", true)]
Soyad
}
public class MyStringEnumAttribute : Attribute
{
private string _myAtrribute;
private bool _visible;
public string MyAttribute
{
get { return _myAtrribute; }
set { _myAtrribute = value; }
}
public bool Visible
{
get { return _visible; }
set { _visible = value; }
}
public MyStringEnumAttribute(string _myString, bool _visible)
{
this.MyAttribute = _myString;
this.Visible = _visible;
}
}
public static class MyStringEnumProcess
{
public static string GetEnumStringValue(this MyEnum _mAt)
{
MyStringEnumAttribute[] _myAttributes = _mAt.GetType().GetField(_mAt.ToString()).GetCustomAttributes(typeof(MyStringEnumAttribute), false).Cast<MyStringEnumAttribute>().Where(new Func<MyStringEnumAttribute, bool>(delegate(MyStringEnumAttribute _mEnum)
{
return _mEnum.Visible == true;
})).ToArray();
return _myAttributes.Length > 0 ? _myAttributes[0].MyAttribute : "";
}
}
class Program
{
static void Main(string[] args)
{
//string _gelenAd = MyEnum.Ad.GetEnumStringValue();
//string _gelenSifre = MyEnum.Soyad.GetEnumStringValue();
//Console.WriteLine("Ad :" + _gelenAd);
//Console.WriteLine("Soyad :" + _gelenSifre);
Console.WriteLine(MyEnum.Ad.GetEnumStringValue());
Console.WriteLine(MyEnum.Soyad.GetEnumStringValue());
}
}
}
[/code]
Ve programımızı çalıştırdığımızda aşağıda ki Enum değerlerimizin arka planda saklamış olduğu metinsel değerlerini ekrana yazdırmış oluyoruz.

Tanımlamış olduğumu Enum yapısının içinde her bir değer metinsel değer ve birde gözüküp gözükmeme durumunu saklamak için bool tipinden değer almaktadır.Eğer False verilirse bu enum değerine erişilemeyecektir.Enum yapısını aşağıda ki yaparsak;
[code:c#]
public enum MyEnum
{
[MyStringEnum("Serhat", true)]
Ad,
[MyStringEnum("Taş", false)]
Soyad
}
İkinci değere false verildiği için sadece ekrana "Serhat" değerini yazdıracaktır.

Çok fazla karşılaşılmayan ama aklımızda bulunması gereken bir özellik olduğunu düşünüyorum.
Projeyi indirmek için tıklayınız
Faydalı olması dileğiyle.. İyi Çalışmalar =)
Serhat Taş