これはサンプルタイプです:
public class Product {
public string Name { get; set; }
public string Title { get; set; }
public string Category { get; set; }
public bool IsAllowed { get; set; }
}
そして、いくつかのHTMLコードを生成するためのプロパティを必要とするGenericクラスがあります。
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);
これが可能かどうかはわかりませんが、必要なのは2つだけです。1-PropertyNameのようなもの:IsAllowed
2-プロパティタイプのようなもの:bool
。たぶん、渡す必要はないMainType
ので、プロパティタイプを取得するために使用するので、上記のように処理できる場合は、もう必要ありません。
このようなものを実装するためのあなたの提案は何ですか?
これを行うためのより良い方法はありますか?
アップデート
ArsenMkrt
使用できることがわかったが、プロパティタイプを取得できないと述べたようMemberExpression
に、デバッグでプロパティタイプが表示されます。図を参照してください。
では、どうすればプロパティタイプを取得できますか?
ここで見つけました。