Есть ли способ динамически устанавливать аргументы типа Func<>
, чтобы мне не приходилось использовать бесконечные операторы if
?
Что-то вроде:
Type t = Type.GetType("System.Decimal");
Func<t> foo = new Func<t>(some_function);
Вместо:
Func<Decimal> foo = new Func<Decimal>(some_function);
UPDATE:
Вот фрагмент моего кода:
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.Поле — строка -имя свойства внутри класса "СтавкаДокумента". pd.Expression — это строковое выражение, которое должно оцениваться как тип Polje. stavka является экземпляром StavkaDocumenta.