#c# #methods #attributes
#c# #методы #атрибуты
Вопрос:
У меня есть пользовательский атрибут с именем
[Usermustwait(UserHaveToWait = 0, UserMustWait = false)]
В этом атрибуте метод обновляет обе переменные, я хочу получить это значение, а не значение, которое я определяю…
Я попробовал приведенный ниже пример, но он возвращает 0 и false …
GetType().GetMethod(currentMethodName).GetCustomAttributes(true).OfType<Usermustwait>().FirstOrDefault();
Надеюсь, вы могли бы мне помочь
Спасибо
Класс атрибута :
public class UserMustWait : PreconditionAttribute
{
public bool UserMustWait { get; set; } = false;
public int UserHaveToWait { get; set; } = 0;
public UserMustWait()
{
}
public override Task<PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services)
{
// doing some stuff to verify in a SQLDatabase if the user catched in the context have a specified role or not
// if have not a specified role :
// UserMustWait = true;
// UserHaveToWait = XX;
// I need to read these value in my method to be sure the user wait the number in milisecond
return Task.FromResult(PreconditionResult.FromSuccess());
}
}
Метод :
[Usermustwait(UserHaveToWait = 0, UserMustWait = false)]
public async Task join(string arg)
{
// this is where i need to read the value updated by the attribut
// if(UserMustWait = true)
// SendMessage("You have to wait {UserHaveToWait} secondes");
//
}
Комментарии:
1. Я думаю, вы хотите использовать отражение для проверки экземпляра объекта, а не определения типа learn.microsoft.com/en-us/dotnet/csharp/programming-guide /…
2. Как использовать отражение в методе? Мой атрибут определяется для метода, а не для класса
3. @wdomains Вы не можете установить атрибут для экземпляра объекта.
4. @maxime вы использовали этот атрибут в методе? Можете ли вы показать свое использование?
5. Вы не можете изменять значения внутри атрибута во время выполнения, всякий раз, когда вы получаете атрибут через
GetCustomAttribute
новый экземпляр, создается со значениями из аннотации. Если вы хотите отслеживать состояние переменной, вы можете использовать поля в классе, возможно, вы хотите установить значения по умолчанию с помощью атрибута, но немного сложно увидеть их использование в этом сценарии.