gpt4 book ai didi

c# - 如果我不知道属性是在接口(interface)还是具体类中,如何从属性中获取属性?

转载 作者:行者123 更新时间:2023-11-30 20:24:06 24 4
gpt4 key购买 nike

我有以下代码:

public interface IFoo
{
[DisplayName("test")]
string Name { get; set; }
}

public class Foo : IFoo
{
public string Name { get; set; }
}

使用反射,我需要从属性 Name 中获取属性。但是我不知道我将收到的 Type 是接口(interface)还是具体类。

如果我尝试在具体类上执行 prop.GetCustomAttributes(true),它不会返回我在界面上设置的属性。在这种情况下,我希望它返回。

有没有一种方法可以获取在具体类和接口(interface)上定义的属性?或者我该如何处理?

最佳答案

没有内置方法可以做到这一点,但您可以编写一个:

public static T GetAttribute<T>(this PropertyInfo pi) where T : Attribute
{
var attr = pi.GetCustomAttribute<T>();
if (attr != null) return attr;

var type = pi.DeclaringType;
var interfaces = type.GetInterfaces();

foreach(var i in interfaces)
{
var p = i.GetProperties().FirstOrDefault(x => Attribute.IsDefined(x,typeof(T)));
if (p != null)
return p.GetCustomAttribute<T>();
}
return null;
}

用法:

var f = new Foo();
var prop = f.GetType().GetProperty("Name");
var attr = prop.GetAttribute<DisplayNameAttribute>();

关于c# - 如果我不知道属性是在接口(interface)还是具体类中,如何从属性中获取属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422305/

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