Динамически устанавливать типы Func<>

Есть ли способ динамически устанавливать аргументы типа 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.

8
задан Milos Mijatovic 16 April 2012 в 15:38
поделиться