Avatar billede spif2001 Nybegynder
01. juni 2006 - 13:27 Der er 6 kommentarer og
1 løsning

Få fat i en Attribute værdi i en property

Hej

Jeg har følgende Attribut:

[AttributeUsage(AttributeTargets.All)]
public class OffSetAttribute : System.Attribute
{
    public readonly short OffSetVal;

    public OffSetAttribute(short offSet)
    {
        this.OffSetVal = offSet;
    }
}

og bruger den på en property sådan her:

private short pp = 0;

[OffSet(33)]
public short PPPlus
{
    get
    {
        return this.pp /*+ OffSet værdi her*/;
    }
}

Hvordan får jeg fat i den Attribute værdi på 33, så jeg kan lægge den til pp som vist i /* */ området?
Avatar billede nielle Nybegynder
01. juni 2006 - 18:09 #1
using System;
using System.Reflection;

namespace e713166
{
    class Program
    {
        static void Main(string[] args)
        {
            DemoClass dc = new DemoClass();
            Console.WriteLine(dc.PPPlus);
        }
    }

    [AttributeUsage(AttributeTargets.All)]
    public class OffSetAttribute: System.Attribute
    {
        public readonly short OffSetVal;

        public OffSetAttribute(short offSet)
        {
            this.OffSetVal = offSet;
        }
    }

    class DemoClass
    {
        private short pp = 10;

        [OffSet(33)]
        public short PPPlus
        {
            get
            {
                PropertyInfo propertyInfo = this.GetType().GetProperty("PPPlus");
                foreach (Attribute attr in propertyInfo.GetCustomAttributes(false))
                {
                    if (attr is OffSetAttribute)
                    {
                        OffSetAttribute offsetAttr = attr as OffSetAttribute;
                        return (short) (pp + offsetAttr.OffSetVal);
                    }
                }

                return pp;
            }
        }
    }
}
Avatar billede arne_v Ekspert
02. juni 2006 - 03:27 #2
hvis man er sten sikker på at den er der så man nøjes med:

        [OffSet(33)]
        public short PPPlus
        {
            get
            {
                return (short)(pp + ((OffSetAttribute)GetType().GetProperty("PPPlus").GetCustomAttributes(typeof(OffSetAttribute), false)[0]).OffSetVal);
            }
        }
Avatar billede spif2001 Nybegynder
02. juni 2006 - 08:21 #3
Hæ - gutten der skulle bruge det, blev enig med sig selv om at lave det på en helt anden måde - typisk...

Testede lige arnes og den virkede ellers fint. Men Nielles er så vidt jeg lige kan overskue fuldt ud ligeså god.

Smid et svar begge to for en deler.
Avatar billede nielle Nybegynder
02. juni 2006 - 08:27 #4
Svar :^)
Avatar billede arne_v Ekspert
03. juni 2006 - 01:09 #5
jeg frafalder

min kode byggede på nielles kode - jeg ville bare lige påpege GetCustomAttributes
varianten med type som argument
Avatar billede spif2001 Nybegynder
03. juni 2006 - 06:45 #6
ok - nielle scorer kassen.
Avatar billede nielle Nybegynder
03. juni 2006 - 06:56 #7
Takker for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Afdelingschef til GDPR & Tech Regulation

Ennova A/S

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Nye kolleger søges til IT Stab i Forsvaret