C Sharp String Description dan Enuma Çevirme

  1. beyhude
    11
    168
    10/11/2018 4:50:00 PM

    String den enuma convert etmek istiyorum , string bir veriyi nasıl enuma çevirebilirim ?

    Aşağıda ki gibi bir enumım var , bana ön yüzden (view den) alan string olarak geliyor , Ücretli , Ücretsiz , Yok olarak , enumın description değeri geliyor aslında ön yüzde seçilene göre. Ben bu string değeri , yani enum ın descriptionını , nasıl enuma convert ederim?

    ParkingType p=convertToEnumFromString("Ücretli"); gibi bir converte ihtiyacım var , nasıl yapabilrim ?

    public enum ParkingType : int
    {
            [Description("Yok")]
            None,
            [Description("Ücretli")]
            Paid,
            [Description("Ücretsiz")]
            Free
    }
    
    c# 2 ay önce 227 Görüntüleme

( 1 ) Cevap

  1. Snoopy
    11
    9201
    10/11/2018 5:31:00 PM

    c_sharp_string_to_enum

    Yukarıdaki gibi istiyorsun heralde , bu arada güzel soru teşekkürler.

    bunun için kendi DescriptionToEnum metodumuzu yazalım, ben extension yapmıyorum , istersen sen yapabilirsin , yer yer açıklamalar yaptım , metodun kullanım şeklide main içinde

    class Program
    {
        static void Main(string[] args)
        {
    
            ParkingType p = DescriptionToEnum<ParkingType>("Ücretli");
    
            Console.ReadLine();
        }
    
        public static T DescriptionToEnum<T>(string description)
        {
            var type = typeof(T);
    
            //Tip kontrolü , tip enum değilse hata fırlat
            if (!type.IsEnum)
                throw new InvalidOperationException("Tip Enum Olmalı");
    
            foreach (var itemField in type.GetFields())
            {
                var attribute = Attribute.GetCustomAttribute(itemField, typeof(DescriptionAttribute)) as DescriptionAttribute;
    
                if (attribute != null)
                {
                    if (attribute.Description == description)
                        return (T)itemField.GetValue(null);
                }
                else
                {
                    if (itemField.Name == description)
                        return (T)itemField.GetValue(null);
                }
            }
            throw new ArgumentException("Verilen description bulunumadı");
        }
    }
    

Cevabınız