c# - 如何使用方法参数属性

标签 c# .net decorator custom-attributes

我一直在努力寻找如何编写自定义属性来验证方法参数的示例,即转换为以下形式:

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/

相关文章:

c# - 有效跳过二维字符串数组中的空白行

c# - MVC Razor 单选按钮

java - 装饰器模式(我可能滥用)的问题

python:常规方法和类方法之间的混合

c# - 对其他应用程序进行同步调用

c# - 反序列化异常处理

c# - WPF Dispatcher VS Winform UI 线程控制调用

C# 使用字典替换正则表达式匹配的模式

c# - 将命令行参数传递给我的应用程序的已运行实例

python - 识别等效的可变参数函数调用以进行内存