Ustaw wartość atrybutu niestandardowego z wyliczenia w C#

0

Pytanie

Mam jeden atrybut użytkownika, jak pokazano poniżej,

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

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

Użycie tego atrybutu(SetValForAll) chcę przekazać wartość Limit, za pomocą jednej aukcji, ale ono pokazuje błąd "Argument atrybutu musi być stałym wyrażenie, wyrażenie, rodzaju lub wyrażeniem do tworzenia tablicy typu parametru atrybutu".

Moje wyliczenie wygląda tak, jak pokazano poniżej,

        public enum LimitEnum
        {
            max,
            min
        }

Poniższy fragment kodu generuje błąd w wierszu atrybut.

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

Jak mogę uzyskać wartość z LimitEnum, wykorzystując atrybut SetValForAll, a nie przekazując sztywno zakodowane wiersz?

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

Najlepsza odpowiedź

0

Można użyć nameof wyrażenie, które pomoże ci enum jak stała znakowa:

[SetValForAll(nameof(LimitEnum.max))]

(Odniesienie.)

2021-11-23 22:27:24

to dobry pomysł - przekazania domeny w postaci stałej linii.
R.Abbasi

Dziękuję @stenehr. To działa. Zaznaczyłem odpowiedź jak brać
Abhishek
0

Cóż, nie można wysyłać nieregularne linie w wartościach atrybutów. Dlaczego nie skorzystać z enum wpisz zamiast string za swoją własność? Można użyć LimitEnum aby przekazać do konstruktora.

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

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

i używaj go tak :

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

za odpowiedź. To może być najlepszym rozwiązaniem. Dzięki za sugestię
Abhishek

W innych językach

Ta strona jest w innych językach

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