Есть ли способ выбрать только properties
, которые украшены указанным Attribute
и извлечь Attribute
данные ... все за один проход?
В настоящее время я впервые делаюPropertyInfo
фильтрация и затем я получаю данные атрибута:
Данные атрибута:
public class Weight
{
public string Name { get; set; }
public double Value { get; set; }
public Weight(string Name,double Value) {
this.Name = Name;
this.Value = Value;
}
}
Атрибут:
[AttributeUsage(AttributeTargets.Property)]
public class WeightAttribute : Attribute
{
public WeightAttribute(double val,[CallerMemberName]string Name=null)
{
this.Weight = new Weight(Name, val);
}
public Weight Weight { get; set; }
}
Извлечение:
private static IReadOnlyList<Weight> ExtractWeights(Type type)
{
var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)
.Where(x => x.GetCustomAttribute<WeightAttribute>() != null);
var weights = properties
.Select(x => x.GetCustomAttribute<WeightAttribute>().Weight)
.ToArray();
return weights;
}
Как вы можете видеть в моем методе Extractor
, я сначала фильтрую PropertyInfo[]
, а затем получаю данные. Есть ли другой, более эффективный способ?