如何获得财产get或set体财产属性 [英] How to get attribute on property in property get or set body

查看:133
本文介绍了如何获得财产get或set体财产属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有可能获得财产的财产属性获取或设置身体的没有的StackFrame

例如:

  [SomeAttribute]
公众诠释SomeProp
{
    得到
    {
        // SomeAttribute获取上设置该属性
    }
    组
    {
        // SomeAttribute获取上设置该属性
    }
}


解决方案

您可以写这样的功能,而不是由字符串lliterals由前pression获得属性名称

 公共字符串项目(这件T OBJ,防爆pression<&Func键LT; T,对象>>前pression)
{
    如果(如pression.Body是MemberEx pression)
    {
        返回((MemberEx pression)前pression.Body).Member.Name;
    }
    如果(如pression.Body是UnaryEx pression)
    {
        返回((MemberEx pression)((UnaryEx pression)前pression.Body).Operand).Member.Name;
    }
    抛出新的InvalidOperationException异常();
}

用法:

 公众诠释SomeProp
{
  得到
  {
     VAR attribs =
           。this.GetType()的getProperty(this.Item(O => o.SomeProp))。属性;
  }
}

Is it possible to get attribute on property in property get or set body without StackFrame?

for example

[SomeAttribute]
public int SomeProp
{
    get
    {
        //Get of SomeAttribute is set on this property
    }
    set
    {
        //Get of SomeAttribute is set on this property
    }
}

解决方案

You can write a function like this and get the property name by an expression not by string lliterals

public string Item(this T obj, Expression<Func<T, object>> expression) 
{
    if (expression.Body is MemberExpression)
    {
        return ((MemberExpression)expression.Body).Member.Name;
    }
    if (expression.Body is UnaryExpression)
    {
        return ((MemberExpression)((UnaryExpression)expression.Body).Operand).Member.Name;
    }
    throw new InvalidOperationException();
}

Usage:

public int SomeProp
{
  get 
  { 
     var attribs = 
           this.GetType().GetProperty(this.Item(o => o.SomeProp)).Attributes;
  }
}

这篇关于如何获得财产get或set体财产属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆