Set personalizat atribut valoare de Enumerare în C#

0

Problema

Am un atribut personalizat ca mai jos,

   [AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
    public class SetValForAll : Attribute
    {
        public string Limit { get; set; }

        public SetValForAll(string limit)
        {
            Limit = limit;
        }
    }

În timp ce utilizați acest atribut(SetValForAll) vreau sa trec valoarea Limită folosind un Enum dar este arată eroare 'Un atribut argument trebuie să fie o expresie constantă, typeof exprimare sau matrice crearea expresie a unui atribut de tip parametru'

Mi Enum este ca mai jos,

        public enum LimitEnum
        {
            max,
            min
        }

Mai jos o bucată de cod este aruncat de eroare în atributul linie.

[SetValForAll(LimitEnum.max.ToString())]
public class UsingTheAttributeHere
{
}

Cum pot lua valori de la LimitEnum în timp ce utilizați SetValForAll atribut, mai degrabă decât trecerea hardcoded string?

.net attributes c# enums
2021-11-23 20:46:12
2

Cel mai bun răspuns

0

Ai putea folosi nameof expresia pe care o va primi enum ca o constantă șir:

[SetValForAll(nameof(LimitEnum.max))]

(De referință.)

2021-11-23 22:27:24

asta e o idee bună să-și treacă numele ca o constantă șir de caractere.
R.Abbasi

Multumesc @stenehr. Acesta funcționează. Am mark raspunsul tau ca a Acceptat
Abhishek
0

Ei bine, nu poți trece non-constanta siruri de caractere în valorile atributelor. De ce nu ai folosi enum tip în loc de string pentru proprietatea dumneavoastra? Puteți utiliza LimitEnum pentru a trece în constructor.

   [AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = false)]
    public class SetValForAll : Attribute
    {
    public LimitEnum Limit { get; set; }

    public SetValForAll(LimitEnum limit)
    {
        Limit = limit;
    }
    }

și de a folosi astfel :

[SetValForAll(LimitEnum.max)]
2021-11-23 21:04:15

pentru răspunsul dumneavoastră. Acest lucru ar putea fi cea mai bună opțiune. Mulțumesc pentru sugestie
Abhishek

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................