我有这个型号:
public class StepAttribute : Attribute
{
private string stepName;
public string StepName
{
get { return stepName; }
set { stepName = value; }
}
}
我创建StepAttribute以用作属性Attribute
public static IEnumerable<PropertyInfo> GetPropertiesFrom<T>(this object instance,string propertyName) where T : Attribute
{
var attrType = typeof(T);
var properties = instance.GetType()
.GetProperties()
.Where (x =>
);
//return (T)property.GetCustomAttributes(attrType, false).First();
//typeof(DisplayAttribute), true) //select many because can have multiple attributes
// .Select(e => ((DisplayAttribute)e))) //change type from generic attribute to DisplayAttribute
// .Where(x => x != null).Select(x => x.Name)
return properties;
}
我有通用类来获取IEnumerable属性传递&#34;&#34;类属性,实例是对象模型和属性名称。
{{1}}
问题:如何从模型中返回IEnumerable PropertyInfo,其中StepAtttribute.StepName等于propertyName?
答案 0 :(得分:1)
它并不是100%清楚你在问什么,但是从你的问题来看,你似乎想要一个方法,它将采用任何类型的字符串和字符串来表示&#34; name&#34;并使用它们获取给定类的属性列表,其中名称设置为给定名称。以下是否对您有帮助?:
private static IEnumerable<PropertyInfo> GetPropertiesByStepName<TModel>(TModel model, string name)
{
// Get the properties where there is a StepAttribute and the name is set to the `name` parameter
var properties = model.GetType()
.GetProperties()
.Where(x =>
x.GetCustomAttribute<StepAttribute>() != null &&
x.GetCustomAttribute<StepAttribute>().Name == name);
return properties;
}
注意:您需要使用命名空间System.Reflection