首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标记属性为GetProperties

标记属性为GetProperties
EN

Stack Overflow用户
提问于 2014-11-20 10:01:27
回答 2查看 49关注 0票数 0

是否有一种方法在类中“标记”一个属性,以便当我循环遍历类的属性时,我可以基于标记或未标记的属性执行一个方法。

我不能通过检查属性值来做到这一点。

测试类循环通过

代码语言:javascript
复制
public class SomeClass {
public List<Object> PropertyOne { get; set; }
public List<Object> PropertyTwo { get; set; }

public SomeClass() {
PropertyOne = new List<Object>();
PropertyTwo = new List<Object>();
}
}

阅读特性:

代码语言:javascript
复制
SomeClass myObject = new SomeClass();
Type myType = myObject.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());

foreach (PropertyInfo prop in props)
{
    // If this prop is "marked" -> Execute code below
}

编辑:谢谢你们给出了很好的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-20 10:03:01

这就是属性的意义所在。创建自己的属性,将其应用于属性并测试prop.GetCustomAttribute<MyMarkerAttribute>()不是null。

代码语言:javascript
复制
public class MyMarkerAttribute : Attribute 
{

}

public class SomeClass 
{
    // unmarked
    public List<Object> PropertyOne { get; set; }

    [MyMarkerAttribute] // marked
    public List<Object> PropertyTwo { get; set; }
}

foreach (PropertyInfo prop in props)
{
    if (prop.GetCustomAttribute<MyMarkerAttribute>() != null)
    {
        // ...
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-11-20 10:04:17

您可以为此使用属性。

代码语言:javascript
复制
public class MyAttribute : Attribute
{

}

public class SomeClass {
[MyAttribute]
public List<Object> PropertyOne { get; set; }
public List<Object> PropertyTwo { get; set; }

public SomeClass() {
PropertyOne = new List<Object>();
PropertyTwo = new List<Object>();
}
}

然后在迭代属性时检查属性,如下所述:如何从代码中检索数据注释?(以编程方式)

代码语言:javascript
复制
public static T GetAttributeFrom<T>(this object instance, string propertyName) where T : Attribute
{
    var attrType = typeof(T);
    var property = instance.GetType().GetProperty(propertyName);
    return (T)property .GetCustomAttributes(attrType, false).FirstOrDefault();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27036693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档