我想检查ref字段指向的字段的字段自定义属性。
我有以下代码示例:
public void FieldSetter<T>(ref T field, T value, string fieldCategory)
{
GlobalDispatcher.NotifyBeforeChange(fieldCategory);
field = value;
GlobalDispatcher.NotifyAfterChange(fieldCategory);
if(true /* Check for field custom attribute*/)
GlobalDispatcher.NotifySpecialChange(fieldCategory);
}
以及以下代码用法:
[SpecialChange]
private int m_field1 = default(int);
public int Field1
{ get { return m_field1; } set { FieldSetter(ref m_field1, value, GlobalDispatcher.Ints); } }
[SpecialChange]
private string m_field2 = default(string);
public string Field2
{ get { return m_field2; } set { FieldSetter(ref m_field2, value, GlobalDispatcher.Strings); } }
我尝试实现SpecialChangeAttribute。 为了使它起作用,我有以下想法,但没有解决方案可以解决所有情况:
有什么想法或提示吗?
答案 0 :(得分:0)
我认为您无法获得作为引用传递的字段的自定义属性。反射处理有关代码的静态元数据,并且参数随调用而变化,您将得到什么。
您可以做的是向表达式的FieldSetter
方法中添加附加参数:
FieldSetter<T>(..., Expression<Func<T>> expression);
并这样称呼它:
FieldSetter(ref m_field2, value, GlobalDispatcher.Strings, ()=> m_field2);
这为您提供了可以检查的lambda方法:
((MemberExpression)expression.Body).Member.GetCustomAttribute<SpecialChange>() != null