gpt4 book ai didi

c# - 使用反射通过从 setter 调用的方法获取属性的属性

转载 作者:太空狗 更新时间:2023-10-29 22:24:41 25 4
gpt4 key购买 nike

注意:这是 answer 的后续行动在 previous question.

我正在用一个名为 TestMaxStringLength 的属性装饰属性的 setter,该属性在从 setter 调用的方法中用于验证。

该属性目前看起来像这样:

public string CompanyName
{
get
{
return this._CompanyName;
}
[TestMaxStringLength(50)]
set
{
this.ValidateProperty(value);
this._CompanyName = value;
}
}

但我更希望它看起来像这样:

[TestMaxStringLength(50)]
public string CompanyName
{
get
{
return this._CompanyName;
}
set
{
this.ValidateProperty(value);
this._CompanyName = value;
}
}

ValidateProperty 负责查找 setter 属性的代码是:

private void ValidateProperty(string value)
{
var attributes =
new StackTrace()
.GetFrame(1)
.GetMethod()
.GetCustomAttributes(typeof(TestMaxStringLength), true);
//Use the attributes to check the length, throw an exception, etc.
}

如何更改 ValidateProperty 代码以在 property 而不是 set 方法 上查找属性?

最佳答案

据我所知,无法从其中一个 setter 的 MethodInfo 中获取 PropertyInfo。当然,您可以使用一些字符串技巧,例如使用名称进行查找等。我在想类似的东西:

var method = new StackTrace().GetFrame(1).GetMethod();
var propName = method.Name.Remove(0, 4); // remove get_ / set_
var property = method.DeclaringType.GetProperty(propName);
var attribs = property.GetCustomAttributes(typeof(TestMaxStringLength), true);

不过,不用说,这并不完全符合性能。

另外,请注意 StackTrace 类 - 如果使用得太频繁,它也会影响性能。

关于c# - 使用反射通过从 setter 调用的方法获取属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628630/

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