gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:06:04 26 4
gpt4 key购买 nike

这是我的方法

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

这是我的自定义属性:

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

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

最佳答案

不,属性实例对它们应用到的目标没有任何概念。

请注意,通常您 目标获取属性,因此无论做什么,获取都可能为接下来发生的任何事情提供信息。可能有点烦人,但希望并非不可行。

所有这一切的一个小异常(exception)是调用者信息属性 - 如果您使用类似的东西

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

... 那么在这种情况下,编译器将填充方法 名称(SaveComponent),即使属性应用于参数也是如此。同样,您可以获得文件路径和行号。

然而,鉴于此关于目的的评论,我认为您遇到了一个更大的问题:

To validate componentToSave and throw an exception before method body even runs.

属性构造函数中的代码只有在获取属性时才会执行。例如,它不会在每次方法调用时执行。这很可能会使您的期望变得不可行。

您可能想研究 AOP,例如与 PostSharp .

关于c# - 从 C# 中的参数属性访问对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com