这是一个示例类型:
public class Product {
public string Name { get; set; }
public string Title { get; set; }
public string Category { get; set; }
public bool IsAllowed { get; set; }
}
我有一个需要属性来生成一些 HTML 代码的通用类:
public class Generator<T> {
public T MainType { get; set; }
public List<string> SelectedProperties { get; set; }
public string Generate() {
Dictionary<string, PropertyInfo> props;
props = typeof(T)
.GetProperties()
.ToDictionary<PropertyInfo, string>(prop => prop.Name);
Type propType = null;
string propName = "";
foreach(string item in SelectedProperties) {
if(props.Keys.Contains(item)) {
propType = props[item].PropertyType;
propName = item;
// Generate Html by propName & propType
}
}
我使用这种类型如下:
Product pr = new Product();
Generator<Product> GT = new Generator<Product>();
GT.MainType = pr;
GT.SelectedProperties = new List<string> { "Title", "IsAllowed" };
GT.Generate();
所以我认为这个过程应该更简单,但我不知道如何实现它,我认为将属性传递给生成器更简单,类似于以下伪代码:
GT.SelectedProperties.Add(pr.Title);
GT.SelectedProperties.Add(pr.IsAllowed);
我不知道这是否可能,我只需要两件事 1-PropertyName like: IsAllowed
2- property type like : bool
。也许不需要通过MainType
我用它来获取属性类型,所以如果我可以像上面那样处理就不再需要它了。
你对实施这样的事情有什么建议?
有没有更好的方法来做到这一点?
更新
如前所述ArsenMkrt
,我发现可以使用MemberExpression
但无法获取属性类型,我在调试中看到属性类型见图:
那么如何获取属性类型呢?
我在这里找到了。