Obtenha o nome e o tipo da propriedade passando-o diretamente
Eu fiz perguntas semelhantesAqui EAqui
Este é um tipo de amostra:
<code> public class Product { public string Name { get; set; } public string Title { get; set; } public string Category { get; set; } public bool IsAllowed { get; set; } } </code>
E eu tenho uma classe genérica que precisa de propriedades para gerar alguns códigos HTML:
<code>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 } } </code>
E eu uso esses tipos da seguinte forma:
<code>Product pr = new Product(); Generator<Product> GT = new Generator<Product>(); GT.MainType = pr; GT.SelectedProperties = new List<string> { "Title", "IsAllowed" }; GT.Generate(); </code>
Então eu acho que esse processo deveria ser mais fácil como é mas não sei como implementá-lo, acho que passar propriedades para o gerador mais simples, algo como o seguinte Pseudo-código:
<code>GT.SelectedProperties.Add(pr.Title); GT.SelectedProperties.Add(pr.IsAllowed); </code>
Eu não sei se isso é possível ou não, eu preciso apenas de duas coisas 1-PropertyName como:IsAllowed
2- tipo de propriedade como:bool
. Talvez não precise passarMainType
Eu uso-o para obter tipos de propriedade, por isso, se eu puder lidar como o acima, não precisa mais dele.
Qual é a sua sugestão para implementar algo assim?
Existe alguma maneira melhor de fazer isso?
Atualizar
ComoArsenMkrt
disse que encontrei pode usarMemberExpression
mas eu não consigo obter o tipo de propriedade, vejo o tipo de propriedade na depuração ver a imagem:
Então, como posso obter o tipo de propriedade?
Eu encontreiAqui.