从 C# 中的参数属性访问对象值

2024-03-02

这是我的方法

public Component SaveComponent([ValidateMetaFields] Component componentToSave) {
    ...
}

这是我的自定义属性:

[AttributeUsage(AttributeTargets.Parameter)]
public class ValidateMetaFieldsAttribute : Attribute
{
    public ValidateMetaFieldsAttribute()
    {
        // how to access `componentToSave` here?
    }
}

我想知道有没有办法访问componentToSave对象来自ValidateMetaFieldsAttribute?我找不到任何示例代码或示例。


不,属性实例没有任何其所应用的目标的概念。

请注意,通常您会获取属性from一个目标,因此无论执行什么操作,都可能为接下来的操作提供信息。可能有点烦人,但希望不是不可行。

所有这一切的一个小例外是来电者信息属性 - 如果您使用类似的东西

[AttributeUsage(AttributeTargets.Parameter)]
public class ValidateMetaFieldsAttribute : Attribute
{
    public ValidateMetaFieldsAttribute([CallerMemberName] string member = null)
    {
        ...
    }
}

...然后编译器将填写method name (SaveComponent) 在这种情况下,即使该属性应用于参数。同样,您可以获取文件路径和行号。

然而,考虑到这个关于目的的评论,我认为你遇到了一个更大的问题:

在方法体运行之前验证 componentToSave 并抛出异常。

仅当获取属性时才会执行属性构造函数中的代码。它是not例如,在每个方法调用上执行。这很可能会让你所期待的一切变得不可行。

您可能想研究 AOP,例如和后锐利 https://www.postsharp.net/aop.net.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C# 中的参数属性访问对象值 的相关文章

随机推荐