Установите значение пользовательского атрибута из перечисления в C#

0

Вопрос

У меня есть один пользовательский атрибут, как показано ниже,

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

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

При использовании этого атрибута(SetValForAll) Я хочу передать значение Limit, используя одно перечисление, но оно показывает ошибку "Аргумент атрибута должен быть постоянным выражением, выражением типа или выражением для создания массива типа параметра атрибута".

Мое перечисление выглядит так, как показано ниже,

        public enum LimitEnum
        {
            max,
            min
        }

Приведенный ниже фрагмент кода выдает ошибку в строке атрибута.

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

Как я могу получить значение из LimitEnum, используя атрибут SetValForAll, а не передавая жестко закодированную строку?

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

Лучший ответ

0

Вы могли бы использовать nameof выражение, которое поможет вам enum как строковая константа:

[SetValForAll(nameof(LimitEnum.max))]

(Ссылка.)

2021-11-23 22:27:24

это хорошая идея - передать имя в виде постоянной строки.
R.Abbasi

Спасибо @stenehr. Это работает. Я отметил ваш ответ как принятый
Abhishek
0

Ну, вы не можете передавать непостоянные строки в значениях атрибутов. Почему бы тебе не воспользоваться своим enum введите вместо string за вашу собственность? Вы можете использовать LimitEnum чтобы передать в конструктор.

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

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

и используйте его вот так :

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

за ваш ответ. Это может быть лучшим вариантом. Спасибо вам за ваше предложение
Abhishek

На других языках

Эта страница на других языках

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