¿Hay alguna forma de establecer argumentos de tipo Func<>
dinámicamente, por lo que no tengo que usar infinidad de sentencias if
?Func <> tipos dinámicamente
Algo así como:
Type t = Type.GetType("System.Decimal");
Func<t> foo = new Func<t>(some_function);
En lugar de:
Func<Decimal> foo = new Func<Decimal>(some_function);
ACTUALIZACIÓN:
He aquí un fragmento de mi código:
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 es una cadena - nombre de una propiedad ins ide "StavkaDokumenta" clase. pd.Expression es una expresión de cadena que debe evaluar al tipo de Polje. stavka es una instancia de StavkaDokumenta.
Si está utilizando infinitos if, tal vez hay algo acerca de su enfoque actual que podría mejorarse? Al menos lo consideraría. – Botz3000
¿Podría darnos un ejemplo de cadena infinita si está intentando resolverlo? – GregC
Si está utilizando infinito 'xxx es SomeType', probablemente haya algo mal con su diseño. –