Func<>
型引数を動的に設定する方法はありますか?無限のif
ステートメントを使用する必要はありませんか?
何かのようなもの:
Type t = Type.GetType("System.Decimal");
Func<t> foo = new Func<t>(some_function);
それ以外の:
Func<Decimal> foo = new Func<Decimal>(some_function);
アップデート:
ここに私のコードからのスニペットがあります:
Type t = typeof(StavkaDokumenta).GetProperty(pd.Polje).PropertyType;
ParameterExpression pe = Expression.Parameter(typeof(StavkaDokumenta), "stavka");
Expression expr = Expressions.ResolveCompleteExpression(pe, pd.Expression);
Expression final = Expression.Convert(expr, t);
if (t == typeof(decimal))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, decimal>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
if (t == typeof(decimal?))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, decimal?>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
else if (t == typeof(int))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, int>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
else if (t == typeof(int?))
{
var lambda = Expression.Lambda<Func<StavkaDokumenta, int?>>(final, pe);
o = lambda.Compile().Invoke(stavka);
}
else if (t == typeof(string))
{
var lambda = Expression.Lambda<Func<string>>(final, null);
o = lambda.Compile().Invoke();
}
pd.Polje は文字列 - 「StavkaDokumenta」クラス内のプロパティの名前です。pd.Expression は、Polje の型に評価される必要がある文字列式です。stavka は StavkaDokumenta のインスタンスです。