Establecer valor del atributo personalizado de Enum en C#

0

Pregunta

Tengo un atributo personalizado como el de abajo,

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

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

Mientras que el uso de este atributo(SetValForAll) quiero pasar el valor de Límite de uso de una Enumeración, sino que está mostrando un error 'Un atributo argumento debe ser una expresión constante, typeof de expresión o de la creación de la matriz de expresión de un atributo de tipo de parámetro'

Mi Enum es como el de abajo,

        public enum LimitEnum
        {
            max,
            min
        }

El siguiente trozo de código es tirar el error en la línea de atributos.

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

¿Cómo puedo tomar el valor de LimitEnum mientras que el uso de SetValForAll atributo, en lugar de pasar cadena codificada?

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

Mejor respuesta

0

Usted podría utilizar la nameof la expresión que va a llegar la enum como una constante de cadena:

[SetValForAll(nameof(LimitEnum.max))]

(De referencia.)

2021-11-23 22:27:24

esa es una buena idea para pasar el nombre como una cadena constante.
R.Abbasi

Gracias @stenehr. Funciona. He marque su respuesta Aceptada
Abhishek
0

Bueno, no se puede pasar de la no-cadenas constantes en los valores de atributo. Por qué no utilizar su enum en lugar del tipo de string para su propiedad? Puede utilizar LimitEnum para pasar en el constructor.

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

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

y utilizarlo como este :

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

por tu respuesta. Esta podría ser la mejor opción. Gracias por tu sugerencia
Abhishek

En otros idiomas

Esta página está en otros idiomas

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