Nastavte vlastní atribut hodnoty z Enum v C#

0

Otázka

Mám jednu vlastní atribut jako níže,

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

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

Při použití tohoto atributu(SetValForAll) chci předat hodnotu Omezit pomocí jednoho Enum, ale je to ukazuje error 'atribut argument musí být konstantní výraz, typeof výraz nebo vytvoření pole výrazu atributu typ parametru'

Můj Enum je jako níže,

        public enum LimitEnum
        {
            max,
            min
        }

Níže kus kódu hází chybu v atributu line.

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

Jak mohu vzít hodnotu z LimitEnum při použití SetValForAll atribut, spíše než kolem hardcoded string?

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

Nejlepší odpověď

0

Můžete použít nameof výraz, který dostanete enum jako řetězec konstantní:

[SetValForAll(nameof(LimitEnum.max))]

(Odkaz.)

2021-11-23 22:27:24

to je dobrý nápad předat jméno jako konstantní řetězec.
R.Abbasi

Děkuji @stenehr. To funguje. Mám označte vaši odpověď jako Přijímány
Abhishek
0

No, nemůžete předat non-konstantní řetězce v hodnoty atributů. Proč nepoužiješ enum typ místo string pro vaši nemovitost? Můžete použít LimitEnum předat v konstruktoru.

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

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

a použít to takhle :

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

za vaši odpověď. Tohle by mohl být lepší volba. Děkuji vám za váš návrh
Abhishek

V jiných jazycích

Tato stránka je v jiných jazycích

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