gpt4 book ai didi

c# - 获取覆盖的属性属性

转载 作者:行者123 更新时间:2023-11-30 22:10:25 26 4
gpt4 key购买 nike

我有一个这样的自定义属性:

public class PropertyInfoAttribute : Attribute
{
public bool IsAutoComplete { get; set; }
}

还有这样一个类:

public class Article
{
public virtual int Order { get; set; }
//other properties
}

在另一个继承自 Article 的类中,我覆盖了 Order 属性并声明了它的属性,如下所示:

public class ArticleDetails : Article
{
[PropertyInfo(IsAutoCompele = true)]
public override int Order { get; set; }
}

当我想使用 PropertyInfo 类中的 GetCustomAttributes 方法获取属性时,问题就出现了。我这样做:

PropertyInfo propInfo = //do something for getting property info from the
//ArticleDetails class;

var attr = propInfo.GetCustomAttribute<PropertyInfoAttribute>();

但它什么也没有返回!我不知道为什么!

更新:

我通过这种方法获取属性信息:

    public static void InitPropertyInfoAttribute<TModel, TProperty>(MvcHtmlString source, Expression<Func<TModel, TProperty>> expression)
{
PropertyInfo propInfo = (expression.Body as MemberExpression).Member as PropertyInfo;
}

最佳答案

我认为问题出在这里:

PropertyInfo propInfo = //do something for getting property info from the
//ArticleDetails class;

我假设您实际上是从 Article 获得此属性信息的类,而不是 ArticleDetails这就是它返回 null 的原因。以下代码段对我来说按预期工作:

PropertyInfo propInfo = typeof(ArticleDetails).GetProperty("Order");
var attr = propInfo.GetCustomAttribute<PropertyInfoAttribute>();

更新


根据您的更新 - 问题是 Member MemberExpression 的属性(property)指向 Article类型;

作为此问题的解决方案,您可以更新您的 InitPropertyInforAttribute如下:

MemberExpression memberExpression = (expression.Body as MemberExpression);
return typeof(TModel).GetProperty(memberExpression.Member.Name);

并且不要忘记您应该通过 ArticleDetails作为第一个泛型类型参数 - InitPropertyInfoAttribute<ArticleDetails, propertyType> .

关于c# - 获取覆盖的属性属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835132/

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