私は以下のようにいくつかのコードスニペットを持っています:
実行時に型をチェックして、この状態を解決したい。
PropertyInfo pi = type.GetProperty("propertyName");
var expression = new Object(); // this give me error after expression runs!
// Want to resolve this conditation by checking the type at runtime.
if (pi.PropertyType == typeof(DateTime))
{
// Want to pass the generic type parameter which has a same type created at runtime by identifying the property type.
expression = BuildExpression<T, DateTime>(data, group.Member);
}
private Func<T, V> BuildExpression<T, V>(IEnumerable<T> items, string propertyName)
{
Type type = typeof(T);
PropertyInfo pi = type.GetProperty(propertyName);
Type PropertyType = pi.DeclaringType;
var parameter = Expression.Parameter(typeof(T), propertyName);
var cast = Expression.TypeAs(parameter, pi.DeclaringType);
var getterBody = Expression.Property(cast, pi);
var exp = Expression.Lambda<Func<T, V>>(getterBody, parameter);
return exp.Compile();
}
問題: タイプに条件を記述しなければならず、リフレクションによってプロパティのタイプをチェックしてから、式を作成する必要があります。
私が欲しいもの: プロパティのタイプのランタイム時間をチェックし、プロパティ タイプと同じタイプのランタイム ジェネリック パラメータを作成したい。
基本的に、型チェックIf
の条件を削除したいのですが、条件付きのすべての型をチェックする必要がないように、コードは同じ型を渡す必要があります。のようにautomatically detect the property type
Generic parameter argument
If
string, decimal, double etc..
実行時に型を確認し、プロパティが持っているのと同じ型property
で作成Generic parameter type
したいので、その解決策を教えてください。