Définir l'attribut personnalisé de la valeur d'Enum en C#

0

La question

J'ai un attribut personnalisé comme ci-dessous,

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

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

Pendant l'utilisation de cet attribut(SetValForAll) j'ai envie de passer à la valeur de Limite à l'aide d'un Enum, mais il montre l'erreur 'Un attribut argument doit être une expression constante, typeof de l'expression ou de la création de la matrice de l'expression d'un attribut de type de paramètre'

Mon Enum est comme ci-dessous,

        public enum LimitEnum
        {
            max,
            min
        }

Le morceau de code ci-dessous est jeter de l'erreur dans l'attribut de la ligne.

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

Comment je peut prendre de la valeur à partir de LimitEnum tout en utilisant SetValForAll attribut, plutôt que de passer chaîne codée en dur?

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

La meilleure réponse

0

Vous pouvez utiliser la nameof expression qui vous permettra d'obtenir enum comme une constante de chaîne:

[SetValForAll(nameof(LimitEnum.max))]

(De référence.)

2021-11-23 22:27:24

c'est une bonne idée de passer le nom d'une constante chaîne de caractères.
R.Abbasi

Merci @stenehr. Elle fonctionne. J'ai la marque de votre réponse Acceptée
Abhishek
0

Eh bien, vous ne pouvez pas passer non constantes chaînes de caractères dans les valeurs d'attribut. Pourquoi n'utilisez-vous pas votre enum le type au lieu de string pour votre bien immobilier? Vous pouvez utiliser LimitEnum pour passer dans le constructeur.

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

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

et de l'utiliser comme ceci :

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

pour votre réponse. Cela pourrait être la meilleure option. Merci pour votre suggestion
Abhishek

Dans d'autres langues

Cette page est dans d'autres langues

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