Set personalizzato valore dell'attributo da Enum in C#

0

Domanda

Ho un attributo personalizzato come di seguito,

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

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

Durante l'utilizzo di questo attributo(SetValForAll) voglio passare il valore del Limite di utilizzo di un Enum, ma è mostrando l'errore 'Un argomento dell'attributo deve essere una costante espressione, typeof espressione o la creazione di array di espressione di un attributo del tipo di parametro'

Il mio Enum è come sotto,

        public enum LimitEnum
        {
            max,
            min
        }

Il seguente pezzo di codice è il lancio di errore nell'attributo linea.

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

Come posso prendere valore da LimitEnum durante l'utilizzo di SetValForAll attributo, anziché passare hardcoded stringa?

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

Migliore risposta

0

Si potrebbe utilizzare il nameof espressione che si otterrà il enum come una costante di tipo stringa:

[SetValForAll(nameof(LimitEnum.max))]

(Di riferimento.)

2021-11-23 22:27:24

che è una buona idea per passare il nome come una stringa costante.
R.Abbasi

Grazie @stenehr. Funziona. Ho segnare la risposta Accettata
Abhishek
0

Beh, non si può passare non stringhe costanti nei valori di attributo. Perché non usi il tuo enum tipo invece di string per la vostra proprietà? È possibile utilizzare LimitEnum per passare il costruttore.

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

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

e di utilizzarlo come questo :

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

per la vostra risposta. Questo potrebbe essere l'opzione migliore. Grazie per il tuo suggerimento
Abhishek

In altre lingue

Questa pagina è in altre lingue

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