[c#]因此,筛选由属性枚举值

标签: Linq .Net C#
发布时间: 2017/2/28 23:11:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一些针对每个我的模型如下图所示的自定义属性

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class FieldAttribute : System.Attribute
{
    private FieldFor _fieldFor;

    public FieldAttribute(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>();

现在所有属性的有我的自定义属性,我该怎样才能哪个属性具有名称出于值的列表??

我做这两个查询分别还有来获取我的模型的许多属性值

解决方法 1:

你可以使用GetCustomAttribute方法,属性,然后您可以访问它的成员︰

foreach(var prop in props)
{
    var fieldAttribute = prop.GetCustomAttribute<FieldAttribute>();
    var value = fieldAttribute.FieldFor;
}

它将添加一个公共的属性来获取出于的值非常有用。现在你有只有一个私有字段。

public FieldFor FieldFor { get { return _fieldFor; } }

使用 linq:

props.Where(x => x.GetCustomAttribute<FieldAttribute>().FieldFor == FieldFor.Name);
赞助商