我对每个模型都有一些自定义属性,如下所示
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class FieldAttribute : System.Attribute
{
private FieldFor _fieldFor;
public FieldAttribute(FieldFor fieldFor)
{
_fieldFor = fieldFor;
}
}
FieldFor类型是一个枚举。所以我可以针对像这样的字段声明这个
[Field(FieldFor.Name)]
public string Name { get; set; }
现在要获取我的模型上具有此自定义属性的属性列表,我使用以下
List<PropertyInfo> props = new MyModel().GetType().GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(FieldAttribute))).ToList<PropertyInfo>();
现在我拥有具有自定义属性的所有属性的列表,如何获取哪个属性具有NameFor的FieldFor值?
我正在分别进行两个查询,因为我必须获取模型上许多属性的值
答案 0 :(得分:1)
您可以使用GetCustomAttribute方法获取该属性,然后您可以访问其成员:
foreach(var prop in props)
{
var fieldAttribute = prop.GetCustomAttribute<FieldAttribute>();
var value = fieldAttribute.FieldFor;
}
添加一个公共属性以获得FieldFor的值会很有用。现在你只有一个私有字段。
public FieldFor FieldFor { get { return _fieldFor; } }
使用linq:
props.Where(x => x.GetCustomAttribute<FieldAttribute>().FieldFor == FieldFor.Name);
答案 1 :(得分:1)
你可以这样做:
var props = new MyModel()
.GetType()
.GetProperties()
.Where(prop =>
{
var fieldAttribute = prop.GetCustomAttribute<FieldAttribute>();
if (fieldAttribute != null)
{
return fieldAttribute.FieldFor == FieldFor.Name;
}
return false;
})
.ToList();