Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# Attribute Yapılarında “‘X’ Is Not A Valid Named Attribute Argument Because It Is Not A Valid Attribute Parameter Type” Hatası ve Çözümü

Merhaba,

C#’ta attribute yapılarında çalışıyorken “‘X’ Is Not A Valid Named Attribute Argument Because It Is Not A Valid Attribute Parameter Type” hatasıyla karşılaştıysanız eğer bu içeriğimizde ilgili hatanın nedeni ve çözümü hakkında bilgi bulabileceksiniz.

Şimdi hiç vakit kaybetmeden bir örnek üzerinden konuya giriş yapalım.

    class OrnekAttribute : Attribute
    {
        public string X { get; set; }
        public int Y { get; set; }
        public SqlConnection Z { get; set; }
    }

Gördüğünüz üzere, yukarıdaki kod bloğunda bir attribute tanımlanmıştır. Bu attribute içerisinde string, int ve SqlConnection tipinden olmak olmak üzere üç adet property tanımlanmıştır.

Tanımlanan bu niteliği aşağıdaki şekilde kullanmaya çalıştığımızda göreceğiniz üzere içeriğimizin konusu olan hatayla karşılaşmaktayız.
C# Attribute Yapılarında "'X' Is Not A Valid Named Attribute Argument Because It Is Not A Valid Attribute Parameter Type" Hatası ve Çözümü

Peki bu hatayla neden karşılaşmaktayız? sorusuna gelirsek eğer attribute yapılarıyla ilgili bir kaç bilgi eksikliğini cevap olarak sunmamız yeterli olacaktır.

Attributelarda kullanacağınız parametrelerde bilmeniz gereken hususlar şunlardır;

  • Değer tipli olabilirler
    bool, int, string, char, decimal, double vs…
  • System.Type tipinden olabilirler
    Örneğin;

        class OrnekAttribute : Attribute
        {
            public string X { get; set; }
            public int Y { get; set; }
            public Type Z { get; set; }
        }
    

    Kullanırkende;

        [Ornek(X = "", Y = 0, Z = typeof(SqlConnection))]
    

    şeklinde çağrılabilirler.

  • Enums(Enumaration) olabilirler
    Örneğin;

        class OrnekAttribute : Attribute
        {
            public string X { get; set; }
            public int Y { get; set; }
            public OrnekEnum Z { get; set; }
        }
    
        enum OrnekEnum
        {
            x, y, z
        }
    

    Kullanırkende;

        [Ornek(X = "", Y = 0, Z = OrnekEnum.y)]
    

    şeklinde çağrılabilirler.

  • Object tipte olabilirler
  • Yukarıda bahsedilen tür ve tiplerden herhangi birisinin tek boyutlu dizisi olabilirler.

Ama gelin görün ki, bir attributeun parametresi referans tipinden, çok boyutlu bir diziden yahut yukarıdaki verilen türlerin dışından olamaz! ! !

İşte bu göz ardı edilen bilgiler yüzünden ilgili hatayla karşılaşabilirsiniz.

Umarım derdinize derman niteliğinde olmuştur 🙂

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir