我一直在努力寻找如何编写自定义属性来验证方法参数的示例,即转换为以下形式:
public void DoSomething(Client client)
{
if (client.HasAction("do_something"))
{
// ...
}
else
{
throw new RequiredActionException(client, "do_something");
}
}
进入这个:
public void DoSomething([RequiredAction(Action="some_action")] Client client)
{
// ...
}
据我所知,我需要将此属性添加到我的自定义属性中,但我不知道如何访问装饰参数 Client
:
[AttributeUsageAttribute(AttributeTargets.Parameter)]
public class RequireActionAttribute : System.Attribute
{
public Type Action {get; set;}
public RequireActionAttribute()
{
// .. How do you access the decorated parameter?
Client client = ???
if (!client.HasAction(Action))
{
throw new RequiredActionException(client, Action);
}
}
}
最佳答案
您正在正确应用它 - 但属性基本上不知道它所指的成员。这无疑让生活变得更加艰难。
它不仅不能访问它引用的成员,而且该成员将是 ParameterInfo
,而不是 Client
- 没有简单的访问方法外部参数的值。您的方法需要调用一些帮助程序代码,传递 client
的值以便适本地处理它......或者您需要挂接到将调用您的方法的代码,为了注意属性。
目前还不清楚您希望如何使用它,但很可能您需要对设计进行重大更改。
关于c# - 如何使用方法参数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150365/