C#检查ref字段自定义属性

C#检查ref字段自定义属性,c#,c#-6.0,C#,C# 6.0,我想检查ref字段所指向的字段的字段自定义属性 我有以下代码示例: public void FieldSetter<T>(ref T field, T value, string fieldCategory) { GlobalDispatcher.NotifyBeforeChange(fieldCategory); field = value; GlobalDispatcher.NotifyAfterChange(fieldCategory); if

我想检查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);
}
我尝试实现SpecialChangeAttribute。 我有以下想法只是为了让它工作,但没有解决方案可以解决所有问题:

  • 迭代类字段并使用ReferenceEquals-不使用值类型
  • 从封送处理获取字段偏移量并与字段指针进行比较-无法获取托管类型T的地址

有什么想法或提示吗?

我不认为可以为作为ref传递的字段获取自定义属性。反射处理关于代码的静态元数据,并且作为参数获取的内容在调用之间不断变化

您可以做的是向
FieldSetter
方法添加额外的参数,该方法是一个表达式:

FieldSetter<T>(..., Expression<Func<T>> expression);
这为您提供了方法内部的lambda,您可以检查:

((MemberExpression)expression.Body).Member.GetCustomAttribute<SpecialChange>() != null
((MemberExpression)expression.Body.Member.GetCustomAttribute()!=无效的

您可以检查它是否实现了
IEquatable
IComparable
接口以获取响应!不幸的是,比较变量似乎无助于区分两个具有相同值的独立字段,或者我在这个想法上遗漏了一些东西谢谢你的解决方案!它需要一些全球性的改变,但可能是唯一可行的!谢谢
FieldSetter(ref m_field2, value, GlobalDispatcher.Strings, ()=> m_field2);
((MemberExpression)expression.Body).Member.GetCustomAttribute<SpecialChange>() != null