前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 查找出有某个特性的属性并获取它的值。

C# 查找出有某个特性的属性并获取它的值。

作者头像
科控物联
发布2023-09-01 08:08:49
9810
发布2023-09-01 08:08:49
举报
文章被收录于专栏:科控自动化
代码语言:javascript
复制
public class MyClass
{
    [MyAttribute]
    public string Property1 { get; set; } = "Value1";

    public int Property2 { get; set; } = 42;

    [MyAttribute]
    public bool Property3 { get; set; } = true;
}

public class MyAttribute : Attribute { }

class Program
{
    static void Main()
    {
        MyClass myInstance = new MyClass(); // 创建一个类实例

        Type myClassType = typeof(MyClass);

        var propertiesWithAttribute = myClassType.GetProperties()
            .Where(prop => Attribute.IsDefined(prop, typeof(MyAttribute)))
            .Select(prop => new { Name = prop.Name, Value = prop.GetValue(myInstance) });

        foreach (var property in propertiesWithAttribute)
    {
      Console.WriteLine($"Property: {property.Name}, Value: {property.Value}");
    }
  }
}

在这个示例中,我们有一个 MyClass类,其中包含三个属性。其中两个属性被 MyAttribute特性修饰。使用反射,我们可以通过使用 Attribute.IsDefined 方法来过滤具有 MyAttribute特性的属性。然后,我们使用 Select 方法选择属性的名称和值,并将它们存储在匿名类型中。最后,我们遍历这些属性并打印它们的名称和值。请注意, MyAttribute 类是一个自定义的特性类,您可以根据需要进行定义。

程序里面经常要用。那就封装一个泛型方法。

代码语言:javascript
复制
public static class AttributeHelper
{
    public static IEnumerable<PropertyInfo> GetPropertiesWithAttribute<TClass, TAttribute>()
        where TClass : class
        where TAttribute : Attribute
    {
        Type classType = typeof(TClass);

        var propertiesWithAttribute = classType.GetProperties()
            .Where(prop => Attribute.IsDefined(prop, typeof(TAttribute)));

        return propertiesWithAttribute;
    }
}

测试一下

代码语言:javascript
复制
public class MyClass
{
    [MyAttribute]
    public string Property1 { get; set; } = "Value1";

    public int Property2 { get; set; } = 42;

    [MyAttribute]
    public bool Property3 { get; set; } = true;
}

public class MyAttribute : Attribute { }

class Program
{
    static void Main()
    {
        var propertiesWithAttribute = AttributeHelper.GetPropertiesWithAttribute<MyClass, MyAttribute>();

        foreach (var property in propertiesWithAttribute)
        {
            Console.WriteLine($"Property: {property.Name}");
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档