передать реквизит в качестве параметра другому пользовательскому атрибуту реквизита c # - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу передать свойство в качестве параметра другому пользовательскому атрибуту свойства, но не могу, потому что это не статическая Модель, например:

public class model1
{
     public DateTime param1 { get; set; }
     [CustomAttribute (param1)]
     public string param2 { get; set; }
}

public class CustomAttribute : ValidationAttribute
{
    private readonly DateTime _Date;
    public CustomAttribute(DateTime date)
    {
        _Date= date;
    }
}

, потому что я хочу сделать пользовательскую проверку между этими двумя атрибутами.

1 Ответ

0 голосов
/ 29 ноября 2018

Атрибуты не хранятся в виде исполняемого кода, поэтому существуют значительные ограничения на тип данных, которые вы можете включить в них.

По сути, вы должны придерживаться базовых типов: строк, чисел, дат.Все, что может быть константой.

К счастью, вы можете использовать немного отражения и оператор nameof:

public class model1
{
     public DateTime param1 { get; set; }
     [CustomAttribute (nameof(param1))]
     public string param2 { get; set; }
}

public class CustomAttribute : ValidationAttribute
{
    private readonly string _propertyName;
    public CustomAttribute(string propertyName)
    {
        _propertyName = propertyName;
    }
}

Имейте в виду, что проверкалогика должна находиться вне кода атрибута.

Необходимые ингредиенты для проверки будут Type.GetProperties , PropertyInfo.GetValue и MemberInfo.GetCustomAttribute .

Если вам нужен полный пример и помощь, чтобы лучше объяснить пример использования, сообщите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...